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")
設置時區在POSIXct,POSIXlt,strptime等,這些似乎是同一時間:確定和R中
> 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,2010年3月23日14:36:38 -0400」,「%a,%d%b%Y%H:%M:%S%z」) '應該設置'tz ='UTC',並且注意它在其他示例中表示本地。感謝attr(x,'tzone')的提示。我想對於POSIXct來說,tzone屬性是對象的默認報告時區,但對於POSIXlt,它似乎確實調整了原點。 –