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")
vb POSIXct, POSIXlt, strptime, saat dilimini ayarlayın:Bunlar aynı kat görünmektedir belirleyin ve Ar
> 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"
>
Ama bunlar içlerinde farklı zaman dilimi bilgi sahibi olmak görünür ve öyle Ben beklediğiniz gibi değil:
> 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"
>
benim Mac üzerinde saat dilimidir:
> Sys.timezone()
[1] "America/New_York"
Difference between as.POSIXct/as.POSIXlt and strptime for converting character vectors to POSIXct/POSIXlt ve as.POSIXlt ignores tz argument soruları ilgili görünüyordu, ancak bunu benim için açıklığa kavuşturmadı.
Zamanı nasıl belirleyebilir ve kullanabilirim?
Güncelleme:
aşağıda user3293236 cevabı itibaren, bir zaman dize dilimini beyan ve ayrıştırma eğer '-hhmm' offset sonra hep kullanmalıdır görünüyor 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")
Oh, bu korkunç bir varsayılan. "Strptime" örnek strptime ("Sal, 23 Mar 2010 14:36:38 -0400", "% a,% d% b% Y% H:% M:% S% z") 'ayarlanmalıdır 'tz = 'UTC', ve diğer örneklerde yerel anlamına geldiğini unutmayın. Attr (x, 'tzone') notu için teşekkürler. POSIXct için, tzone özniteliğinin nesne için varsayılan raporlama zaman dilimi olduğunu sanıyorum, ancak POSIX için, orijini ayarlamak gibi görünüyor. –