【发布时间】:2016-08-31 21:20:02
【问题描述】:
我在 R 中有两个日期字符串,它们的格式不同。我将如何将一个日期字符串转换为与另一个一致。下面是这两种格式的示例,不要关注日期而是字符串本身的格式。谢谢!
"Wed Aug 31 14:14:13 2016"
"09/12/2016 10:20 PM EDT"
【问题讨论】:
我在 R 中有两个日期字符串,它们的格式不同。我将如何将一个日期字符串转换为与另一个一致。下面是这两种格式的示例,不要关注日期而是字符串本身的格式。谢谢!
"Wed Aug 31 14:14:13 2016"
"09/12/2016 10:20 PM EDT"
【问题讨论】:
有关格式字符串的详细信息,请参阅help(strptime):
R> d1 <- as.Date("Wed Aug 31 14:14:13 2016", "%a %b %d %H:%M:%S %Y")
R> d1
[1] "2016-08-31"
R> d2 <- as.Date("09/12/2016 10:20 PM EDT", "%m/%d/%Y %H:%M")
R> d2
[1] "2016-09-12"
R>
一旦它们被解析为Date 对象,您就可以按照自己喜欢的方式进行格式化。 Datetime 对象也是如此。
编辑: 由于大多数日期格式实际上是“已知的”,因此您也可以遍历给定的集合并“猜测”。我在 RcppBDT 中有一些代码(在 GitHub 上,但还没有在 CRAN 上)处理这个问题:
R> library(RcppBDT)
R>
R> as.Date(toPOSIXct(c("Wed Aug 31 14:14:13 2016", "09/12/2016 10:20 PM EDT")))
[1] "2016-08-31" "2016-09-12"
R>
【讨论】:
R 中的日期起初可能是一个棘手的概念。查看 as.Date() 函数将字符串转换为日期,并查看 stpftime() 函数将日期时间解析为字符串。根据您当前值的格式,其中一个或两个将很有用。
本质上,您最终要做的是解析日期的各个组成部分以获得您需要的内容(例如日、月、年),但解析会因字符串的当前格式而异。对于这样一个广泛的问题,很难给出明确的答案,但您肯定希望熟悉上述功能。
【讨论】:
strftime 用于格式化;您大概是指strptime 用于解析。