在R中转换日期格式?

4

我是一个有用的助手,可以为您进行文本翻译。

我有一个在R中的数据框(最初是CSV格式),其中日期以以下3种格式表示:

2011-06-02T17:16:05Z

2012-06-02T17:16:05-07:00

6/2/11 17:16:05

这是年-月-日-时间的格式。我不太清楚-07:00是什么,因为它似乎对所有时间戳都相同(除了一些为-08:00的情况),但我猜它是某种类型的时区偏移。

我不太确定这些是什么格式(有人知道吗?),但我需要将其转换为这种格式:

6/2/11 17:16:05

日期格式为年-月-日-时间

我想以这样的方式进行操作,使CSV文件中所有日期(在同一行中)都转换为第二种格式。我该如何在R中实现?

完整数据集可以在这里找到。


3
那是POSIX时间。 "T"将日期与时间分开。这不是16:05,而是17:16:05(05是秒而不是分钟)。-07:00是相对于GMT的偏移量。 - GSee
谢谢,我更新了问题。这是否意味着下面的答案是错误的? - histelheim
您提供的完整数据集链接已经失效。 - GSee
那个文件中的时间看起来与您在此问题中展示的完全不同。 - GSee
忘记更新git仓库了,现在已经完成了。抱歉。 - histelheim
2个回答

2
这里是另一个尝试,假设你的数据一开始就是文本:
test <- c("2011-06-02T17:16:05Z","2012-06-02T17:16:05-07:00")
format(as.POSIXct(test,format="%Y-%m-%dT17:%H:%M"),"%m/%d/%y %H:%M")

[1] "06/02/11 16:05" "06/02/12 16:05"

数据可以在这里找到:https://github.com/aronlindberg/VOSS-Sequencing-Toolkit/blob/master/rubinius_rubinius_sequencing/rubinius-since-2011.csv - histelheim
@AronLindberg - 如果它在两个案例中有效,那么它也会在11,000个案例中有效。只需将“test”替换为“dataframename$created_at”。 - thelatemail
谢谢。我如何将此应用于CSV文件? - histelheim
我在将此应用于我的代码时遇到了问题,因为我最后还有事件,其编码方式为:“6/2/11 17:16:05”。您的代码也能够适应这种情况吗? - histelheim

1
您可以尝试以下操作,其中myDates是日期列。
format(strptime(myDates, format="%Y-%m-%dT17:%H:%M"), format= "%m/%d/%Y %H:%M")
[1] "06/02/2011 16:05" "06/02/2012 16:05"

or with 2-digit year

# Note the lower-case %y at the end
format(strptime(myDates, format="%Y-%m-%dT17:%H:%M"), format= "%m/%d/%y %H:%M")
[1] "06/02/11 16:05" "06/02/12 16:05"

关于Z,它表示格林威治标准时间(思考:伦敦)。
-7:00表示比格林威治标准时间早7小时(思考:科罗拉多州/山区标准时间等)。
请参见此处以获取更多参考资料。

这会删除数据中不均匀出现的Z和-7:00吗? - histelheim
是的,它会删除它并且不考虑时区。 - Ricardo Saporta
这让我想知道,as.POSIX...strptime有什么优缺点?我们的答案几乎完全相同,但使用了稍微不同的函数。 - thelatemail
通常情况下,我在从字符转换时使用strptime。但是这是一个非常好的问题。 - Ricardo Saporta
我在将此应用于我的代码时遇到了问题,因为我最后还有事件,其编码方式为:“6/2/11 17:16:05”。您的代码也能够适应这种情况吗? - histelheim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接