2017-02-03 120 views
2

我有一個POSIXct變量,上面寫着2016年12月15日20時11分29秒的PST,但PST不正確。它實際上應該閱讀2016年12月15日二十時11分29秒GMT轉換不正確時區

我需要做的時區正確,格林尼治標準時間的話,我需要將其轉換爲紐約時間

所以我給出的2016- 12-15 20:11:29太平洋標準時間。這應該是2016-12-15 20:11:29 GMT,那麼我需要將2016-12-15 20:11:29 GMT轉換爲「America/New_York」,所以最終結果將是16:11:29 America/New_York因爲紐約時間是BEHIND GMT時間。

我試過這個方法很多,但不能得到它的工作。有任何想法嗎?

p = as.POSIXct("2016-12-15 20:11:29 PST") 
p 

********** UPDATE ********* 我真正的代碼使用的變量和建議的解決方案不起作用。見下文

 p = as.POSIXct("2016-12-15 20:11:29 PST") 
      out = as.POSIXct(p, tz="GMT") 
      out 
      attr(out,"tzone") <- "America/New_York" 
      out 

>   out 
[1] "2016-12-15 20:11:29 PST" 
>   attr(out,"tzone") <- "America/New_York" 
>   out 
[1] "2016-12-15 23:11:29 EST" ### this is incorrect 

***這也母鹿鼻涕工作

p = as.POSIXct(p, usetz=TRUE, tz="GMT") 
     (format(p, tz="America/New_York")) 

[1] "2016-12-15 23:11:29 EST" 
> p = as.POSIXct(p, usetz=TRUE, tz="GMT") 
>   (format(p, tz="America/New_York")) 
[1] "2016-12-15 23:11:29" 

回答

1

你的問題是,你的p是在你的系統時區默認:

p = as.POSIXct("2016-12-15 20:11:29 PST") 
p 
# I'm in Australian Eastern Standard Time, AEST 
#[1] "2016-12-15 20:11:29 AEST" 
as.numeric(p) 
#[1] 1481796689 

轉換這個地方的datetime到UTC,這改變了底層數據,通過格式和時區重置爲格林尼治標準時間(除非你已經在格林尼治標準時間,那麼它不會做任何事情,當然):

p2 <- as.POSIXct(format(p),tz="UTC") 
p2 
#[1] "2016-12-15 20:11:29 UTC" 
as.numeric(p2) 
#[1] 1481832689 
p2 - p 
#Time difference of 10 hours 
# ...which is the difference between AEST and GMT 

然後你ç調整時區屬性,這隻會改變日期/時間對象的顯示。它不影響基礎數值數據:

attr(p2,"tzone") <- "America/New_York" 
p2 
#[1] "2016-12-15 15:11:29 EST" 

as.numeric(p2) 
#[1] 1481832689 
1

我可以給你最的方式出現,但[R認爲你是錯的時間差:

> p = as.POSIXct("2016-12-15 20:11:29 PST", usetz=TRUE, tz="GMT") 
> p 
[1] "2016-12-15 20:11:29 GMT" 
> (format(p, tz="America/New_York")) 
[1] "2016-12-15 15:11:29" 

響應編輯。我沒有看到問題。 R中時間的數字表示總是GMT。您可以在輸入與參數做一些事情來空出錯誤的TZ但後來你的輸出與formatstrftime只需要簡單地指定一個參數不同的時區。 (使用一個變量應該沒有影響。)

p = "2016-12-15 20:11:29 PST" 
pp = as.POSIXct(p, usetz=TRUE, tz="GMT") 
pp 
[1] "2016-12-15 20:11:29 GMT" 
+0

'out < - as.POSIXct(「2016-12-15 20:11:29 PST」,tz =「GMT」); attr(out,「tzone」)< - 「America/New_York」'如果你想保留POSIXct結構但改變時區。但我同意結果是15:11:29 – thelatemail

+0

我看到這可以在你的代碼中工作,但在我的真實代碼中,我有一個可變var,而不是字符串日期。所以它看起來像as.POSIXct(var,usetz = TRUE,tz =「GMT」),它不起作用。我會嘗試重現和更新 – user3022875

+0

這個問題,請參閱編輯 – user3022875