2011-11-04 11 views
7

Mam dane szeregów czasowych uzyskane z rejestratora danych, który został ustawiony na jedną strefę czasową bez oszczędności w świetle dziennym (NZST lub UTC + 12: 00), a zakresy danych kilka lat. Dzienniki danych nie uwzględniają zmian czasu letniego i są zsynchronizowane z czasem lokalnym z DST (bez względu na to, kto go wdrożył).Importuj datę i godzinę w określonej strefie czasowej, pomiń czas letni, aby zaoszczędzić czas

Jednak, gdy dostaję dane do R, nie jestem w stanie prawidłowo użyć as.POSIXct, aby zignorować DST. Używam R 2.14.0 na komputerze z systemem Windows z tymi ustawieniami:

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

Oto trzy znaczniki czasu po drugiej zmianie wiosna DST, każdy są odstępie 1 godziny od siebie:

> 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" 

jak można patrz, zegary przeskoczyły do ​​przodu o 1:59 do 3:00, więc 2:00 jest nieważne, czyli NA. Ponadto mogę użyć tz="UTC", aby zmusić go do zignorowania zmian DST. Wolę jednak zachować prawidłową strefę czasową, ponieważ mam inną serię danych zarejestrowaną jako z DST (NZDT lub UTC + 13: 00), którą chciałbym dodać (za pośrednictwem merge) do mojej analizy.

Jak skonfigurować parametr tz na komputerze z systemem MS Windows? Próbowałem wielu rzeczy, takich jak "NZST", "Nowa Zelandia Standard Time", "UTC + 12: 00", "+1200" itd., Ale bez powodzenia. Czy mogę zmodyfikować inne ustawienie?

+2

Możesz użyć 'tz =" Etc/GMT + 12 "' – James

+0

@ James, dlaczego nie dasz tej odpowiedzi? –

+0

@BenBolker Czy wystarczy dodać odpowiednie ozdoby, aby przekroczyć limit znaków – James

Odpowiedz

7

Można użyć 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" 

Aby uzyskać pełną listę dostępnych stref czasowych użyciu

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

Istnieje kilka plików .tab tam, które nie są czasowe, ale trzymać niektóre informacje, ale mój regex-fu nie jest wystarczająco dobry, aby móc wykluczyć je z argumentem wzoru do dir.

1

Jeśli dodasz 12 * 60 * 60 do wektora pochodnego UTC, będziesz mieć lokalny "standardowy" czas.

+0

12 godzin? Czy masz na myśli 1 godzinę? tj. 60 * 60 –

+0

Chcesz UTC + 12, ale czyż nie? – James

+0

@Mike Toews. Myślałem, że jesteś 12 godzin przed UTC –