2017-08-26 52 views
0

我剛剛發現一個大的數據文件,「DATE」列存儲爲O5JAN2004,06JAN2004這樣的字符。該數據文件中的時間與紐約時間匹配,我住在洛杉磯。日期,時區和POSIXct

然後我使用as.Date將字符轉換爲日期。

t <- as.Date(key$DATE[1], format = "%d%b%Y") 
[1] "2004-01-05" 

但是當我使用as.POSIXct(T),它返回我:

> as.POSIXct(t) 
[1] "2004-01-04 16:00:00 PST" 
> as.POSIXlt(t) 
[1] "2004-01-05 UTC" 

我想在網站上提到的幾種方法,但結果並沒有改變:

t <- as.Date(key$DATE[1], format = "%d%b%Y", 'PST') 
t <- as.Date(key$DATE[1], format = "%d%b%Y", 'EST') 
t <- as.Date(key$DATE[1], format = "%d%b%Y", tz="America/New_York") 
t <- as.Date(keyi$DATE[1], format = "%d%b%Y", tz="America/Los_Angeles") 
as.POSIXct(t, tz = "America/Los_Angeles") 
as.POSIXct(t, tz = "America/New_York") 

我想知道:當我使用as.POSIXct(t)時,我該怎麼做,它會返回我「2004-01-05 PST」或任何其他時區。

我在想,因爲Date最初是作爲字符存儲的,所以它不會記得它原來的時區,對不對?

我得到

as.Date(as.POSIXct(t)) 
> "2004-01-05" 

但是爲什麼as.POSIXct(T)返回一個結果?因爲我也有其他數據文件,我會使用as.POSIXct(t)來獲得「2004-01-05 PST」。

謝謝!

回答

1

您的as.POSIXlt(t)顯示as.Date默認使用GMT。但as.POSIXct默認使用本地時間,因此存在不需要的轉換。但你可以解決這個問題。

strptime有一個tz參數來指定基準時區。這對我有效:

t = strptime(key$DATE[1], format = "%d%b%Y", tz= "America/Los_Angeles") 
as.POSIXct(t) 
[1] "2004-01-05 PST" 

警告:什麼和tz值不工作似乎是很奇怪。

+0

謝謝!我有一個嘗試! –