2014-03-26 71 views
0

下面是我的R代碼行爲怪異。我預計進入22:00的時間,但我得到23:00。as.POSIXct爲什麼要在我的時間加1小時?

as.POSIXct(chron(dates="01/04/06",times="22:00:00"),tz="CET") 
[1] "2006-01-04 23:00:00 CET" 

在我的代碼的下一行我使用的結果來選擇從XTS /動物園對象的窗口:因此只是忽略該錯誤並且不是輸入21:00(在上面),因爲它返回wasnt有用錯誤的數據。使用上面的代碼結果窗口返回正確的值。

head(qs<-as.zoo(window(Q,start=as.POSIXct(chron(dates="01/04/06",times="22:00:00"),tz="CET"),end=as.POSIXct(chron(dates="01/05/06",times="21:00:00"),tz="CET")))) 

下面是一組樣本數據(Q):

Stage.Qm Flow.Qm Stage.QmDB Flow.QmDB Stage.Q1000 Flow.Q1000 Stage.Q1000DB Flow.Q1000DB 
2006-01-04 23:00:00 541.1589 5.636957 541.1592 5.646017 541.5708 20.44692  541.5708  20.44692 
2006-01-04 23:01:00 541.1589 5.637268 541.1592 5.645087 541.5701 20.41321  541.5701  20.41321 
2006-01-04 23:02:00 541.1589 5.638604 541.1588 5.635806 541.5701 20.40946  541.5701  20.40946 
2006-01-04 23:03:00 541.1589 5.638979 541.1588 5.635694 541.5704 20.42712  541.5704  20.42712 
2006-01-04 23:04:00 541.1589 5.639619 541.1590 5.640691 541.5710 20.45848  541.5710  20.45848 
2006-01-04 23:05:00 541.1590 5.640662 541.1591 5.641682 541.5715 20.47893  541.5715  20.4789 
+3

你可以閱讀文檔:「目前實施代上的對象不處理時區,也沒有夏令時。」因此,解決方案是在這裏不使用'chron'。 – Roland

+0

謝謝。我已經改爲'as.POSIXct(strptime(「2006-01-04 22:00:00,」%Y-%m-%d%H:%M:%S「)) '[1]「2006-01-04 22:00:00 CET」' – jjunju

+0

1.你不需要'strptime'。 2.我建議始終明確設置時區。 3.隨時爲你的問題寫一個答案。 – Roland

回答

3

在你可以閱讀文檔:「目前實施代上的對象不處理時區,也沒有夏令時。 「因此,解決方案是在這裏不使用chron

只需使用as.POSIXct.default

as.POSIXct("2006-01-04 22:00:00", "%Y-%m-%d %H:%M:%S", tz="CET") 
[1] "2006-01-04 22:00:00 CET" 
+0

我有一個有點相關的問題,沒有回答上述。你能告訴我這裏發生了什麼嗎? '> Q1 2015年12月31日22時00分零零秒 40.99648 > Q2 2015年12月31日22時00分零零秒 40.99648 > cbind(Q1,Q2) Q1 Q2 2015年12月31日23 :00:00 40.99648 40.99648 '當我做cbind時,或者當我在q1和q2上操作1小時,包括保存到列表中時,時間會發生變化。 – jjunju

+0

@jjunju如果您有新的問題,請提出一個新問題。當你這樣做時,別忘了提供一個[可重現的例子](http://stackoverflow.com/a/5963610/1412059)。 – Roland

相關問題