t.ct = as.POSIXct("2009-01-05 14:19 +1200", format="%Y-%m-%d %H:%M %z")
t.lt = as.POSIXlt("2009-01-05 14:19 +1200", format="%Y-%m-%d %H:%M %z")
t.st = strptime("2009-01-05 14:19 +1200", format="%Y-%m-%d %H:%M %z")
这些似乎是相同的时间:
> t.ct -t.lt
Time difference of 0 secs
> t.ct -t.st
Time difference of 0 secs
> str(t.ct)
POSIXct[1:1], format: "2009-01-04 21:19:00"
> str(t.lt)
POSIXlt[1:1], format: "2009-01-04 21:19:00"
> str(t.st)
POSIXlt[1:1], format: "2009-01-04 21:19:00"
>
但这些似乎含有不同的时区信息,与我的预期不符:
> strftime(t.ct,"%Y-%m-%d %H:%M:%S %z")
[1] "2009-01-04 21:19:00 -0500"
> strftime(t.lt,"%Y-%m-%d %H:%M:%S %z")
[1] "2009-01-04 21:19:00 +1200"
> strftime(t.st,"%Y-%m-%d %H:%M:%S %z")
[1] "2009-01-04 21:19:00 +1200"
>
我的 Mac 的时区是:
> Sys.timezone()
[1] "America/New_York"
以下是您需要翻译的内容:
这两个问题Difference between as.POSIXct/as.POSIXlt and strptime for converting character vectors to POSIXct/POSIXlt和as.POSIXlt ignores tz argument似乎有关联,但没有为我澄清这个问题。
我如何确定地设置一个时间并使用它?
更新:
从下面user3293236的答案中,似乎应该始终声明字符串的时区,并且如果您解析“-hhmm”偏移量,则始终使用tz="UTC"
:
t.ct = as.POSIXct("2009-01-05 14:19 +1200", format="%Y-%m-%d %H:%M %z", tz="UTC")
t.lt = as.POSIXlt("2009-01-05 14:19 +1200", format="%Y-%m-%d %H:%M %z", tz="UTC")
t.st = strptime("2009-01-05 14:19 +1200", format="%Y-%m-%d %H:%M %z", tz="UTC")
?strptime
示例strptime("Tue, 23 Mar 2010 14:36:38 -0400", "%a, %d %b %Y %H:%M:%S %z")
应该设置tz='UTC'
,并注意它在其他示例中表示本地时间。感谢提供关于attr(x,'tzone')
的说明。我想对于POSIXct,tzone属性是对象的默认报告时区,但对于POSIXlt,它似乎会调整原点。 - Dave X