2011-11-04 164 views
7

我有從設置爲一個時區而沒有夏令時(NZST或UTC + 12:00)的數據記錄器獲得的時間序列數據,數據跨度一些年。數據記錄器不考慮DST更改,並且與/不使用DST(取決於誰部署它)同步到本地時間。在指定時區導入日期時間,忽略夏令時

但是,當我將數據導入R時,我無法正確使用as.POSIXct來忽略DST。我,使用R 2.14.0 Windows計算機使用這些設置上:

> Sys.timezone() 
[1] "NZDT" 
> Sys.getlocale("LC_TIME") 
[1] "English_New Zealand.1252" 

這裏是整個春季DST CHANGE三個時間戳,每個間隔開1小時:

> ts_str <- c("28/09/2008 01:00", "28/09/2008 02:00", "28/09/2008 03:00") 
> as.POSIXct(ts_str, format="%d/%m/%Y %H:%M", tz="") 
[1] "2008-09-28 01:00:00 NZST" NA 
[3] "2008-09-28 03:00:00 NZDT" 
> as.POSIXct(ts_str, format="%d/%m/%Y %H:%M", tz="UTC") 
[1] "2008-09-28 01:00:00 UTC" "2008-09-28 02:00:00 UTC" 
[3] "2008-09-28 03:00:00 UTC" 

,你可以看,時鐘在1:59到3點之間跳躍,所以2點無效,因此不適用。此外,我可以使用tz="UTC"使其忽略DST更改。不過,我寧願保留正確的時區,因爲我有其他數據系列記錄 DST(NZDT或UTC + 13:00),我想將它們混合(通過merge)進行分析。

如何在MS Windows計算機上配置tz參數?我嘗試了很多東西,比如「NZST」,「新西蘭標準時間」,「UTC + 12:00」,「+1200」等,但沒有運氣。或者我修改其他設置?

+2

你可以用'tz =「Etc/GMT + 12」' – James

+0

@詹姆斯,你爲什麼不給出答案? –

+0

@BenBolker會做什麼,只需要添加一個合適的點綴超過1234個小時的字符數限制 – James

回答

7

您可以使用tz="Etc/GMT+12"

as.POSIXct(ts_str, format="%d/%m/%Y %H:%M", tz="Etc/GMT+12") 
[1] "2008-09-28 01:00:00 GMT+12" "2008-09-28 02:00:00 GMT+12" 
[3] "2008-09-28 03:00:00 GMT+12" 

有關可使用的時區的完整列表,

dir(file.path(R.home("share"),"zoneinfo"), recursive=TRUE) 

有一對夫婦的.TAB文件中有哪些不同時區,但持有一些信息,但是我的正則表達式不夠好,無法用dir的模式參數排除它們。

1

如果只是將12 * 60 * 60添加到UTC導出的矢量,您將擁有本地「標準」時間。

+0

?你的意思是1小時?即60 * 60 –

+0

你想要UTC + 12,但不是嗎? – James

+0

@Mike Toews。我以爲你比UTC提前12小時 –