从人类可读格式转换日期/时间

时间:2013-05-23 14:13:48

标签: r

我有一个人类可读的日期/时间:«Wed Sep 23 07:21:37 +0000 2009»

我从昨天开始尝试将其转换为日期/时间对象。

pb.txt <- "Wed Sep 23 07:21:37 +0000 2009"
pb.date <- as.POSIXct(pb.txt, format="%a %b %d %H:%M:%S +0000 %Y")
format(pb.date, tz="WET",usetz=TRUE)
[1] NA

我可以使用strptime()吗? 怎么了 ?编码问题? 最重要的是,为什么谷歌无法帮助我找到解决方案?没人做过吗? :)

感谢您的帮助,

> sessionInfo()
R version 3.0.1 (2013-05-16)
Platform: i686-pc-linux-gnu (32-bit)

locale:
 [1] LC_CTYPE=fr_FR.UTF-8       LC_NUMERIC=C               LC_TIME=fr_FR.UTF-8       
 [4] LC_COLLATE=fr_FR.UTF-8     LC_MONETARY=fr_FR.UTF-8    LC_MESSAGES=fr_FR.UTF-8   
 [7] LC_PAPER=C                 LC_NAME=C                  LC_ADDRESS=C              
[10] LC_TELEPHONE=C             LC_MEASUREMENT=fr_FR.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] tools_3.0.1

2 个答案:

答案 0 :(得分:3)

您忽略了as.POSIXct调用中的时区,因此正在使用系统的时区(最好的R可以确定它是什么)。我的猜测是,由于夏令时,"WET"中不存在时间。

# include the timezone offset in the format
(pb.date <- as.POSIXct(pb.txt, format="%a %b %d %H:%M:%S %z %Y"))
# [1] "2009-09-23 02:21:37 CDT"
format(pb.date, tz="WET",usetz=TRUE)
# [1] "2009-09-23 08:21:37 WEST"

答案 1 :(得分:0)

解决了!非常感谢Roland的帮助。 问题是工作日和月份的名称(以人类可读的格式)显然是本地化的。因此,您只需将语言环境更改为英语语言环境。

Sys.setlocale("LC_TIME", "en_US.utf8");
format(pb.date, tz="WET",usetz=TRUE)
[1] "2009-09-23 08:21:37 WEST"

约书亚还看到了另一个小错误......它没有解决这个问题,但可能是下一个问题。谢谢他! :)