2013-08-09 12 views
5

Ich denke, ich muss nicht verstehen, wie POSIXct oder etwas funktioniert. Soweit ich verstehe, sind es seit der Epoche Sekunden, wobei die Epoche eine Standardzeit wie 1970-01-01 GMT ist.POSIXnumerisch mit verschiedenen Zeitzonen

Ich nehme zwei POSIXct Zeiten eins in EST eins in PST, die die gleiche absolute Zeit sind. Wenn ich sie jedoch in einen numerischen Wert umwandele, ist das Ergebnis anders ... Könnte mir jemand auf das hinweisen, was ich falsch mache?

> pst = as.POSIXct('2011-01-10 06:45:00', tz = 'PST') 
> est = as.POSIXct('2011-01-10 09:45:00', tz = 'EST') 
> as.numeric(pst) 
[1] 1294641900 
> as.numeric(est) 
[1] 1294670700 

hier ist meine Session Info:

> sessionInfo() 
R version 2.13.0 (2011-04-13) 
Platform: x86_64-unknown-linux-gnu (64-bit) 

locale: 
[1] LC_CTYPE=en_US.UTF-8  LC_NUMERIC=C    LC_TIME=en_US.UTF-8  LC_COLLATE=en_US.UTF-8  LC_MONETARY=C    LC_MESSAGES=en_US.UTF-8 LC_PAPER=en_US.UTF-8  LC_NAME=C\ 
        LC_ADDRESS=C 
[10] LC_TELEPHONE=C    LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C 

attached base packages: 
[1] grid  stats  graphics grDevices utils  datasets methods base 

other attached packages: 
[1] RSQLite_0.9-4  snow_0.3-8   RMySQL_0.8-0  DBI_0.2-5   gtools_2.6.2  reshape2_1.1  ggplot2_0.8.9  proto_0.3-9.2  reshape_0.8.4  fTrading_2100.76 fBasics_\ 
2110.79 MASS_7.3-12 
[13] timeSeries_2130.92 timeDate_2131.00 plyr_1.7.1 

loaded via a namespace (and not attached): 
[1] stringr_0.4 tools_2.13.0 
+1

Stellen Sie sicher, dass Sie auch die Zeitzone Ihres Systems definieren, bevor Sie mit der Wiedergabe von POSIXct beginnen. Sie können dies zum Beispiel mit 'Sys.setenv (TZ = 'GMT')' tun. –

Antwort

5

Zeitzonennamen sind nicht so einfach wie Sie möchten. Eine Liste der verwendeten Namen finden Sie unter http://en.wikipedia.org/wiki/Tz_database für Hintergrund und http://en.wikipedia.org/wiki/List_of_tz_database_time_zones. Am besten ist es, die Notation tz = 'country/city' zu verwenden und die Zeitzone des lokalen Systems explizit festzulegen.

So, hier ist ein Skript, das zwei verschiedene Methoden verwendet, um die Zeitzone zu kodieren:

Sys.setenv(TZ='GMT') 
pst.abr <- as.POSIXct('2011-01-10 06:45:00', tz = 'PST') 
est.abr <- as.POSIXct('2011-01-10 09:45:00', tz = 'EST') 
pst.country.city <- as.POSIXct('2011-01-10 06:45:00', tz = 'America/Los_Angeles') 
est.country.city <- as.POSIXct('2011-01-10 09:45:00', tz = 'America/New_York') 

Wenn wir den POSIXct Werten suchen, die wir wie haben PST haben würden, sehen wir, dass sie tatsächlich haben zwei verschiedene Werte. Beginnend mit der Abkürzung (tz ='PST'), können Sie diese:

> pst.abr 
[1] "2011-01-10 06:45:00 UTC" 
> as.numeric(pst.abr) 
[1] 1294641900 

Sie sehen, dass die Daten, die wir tz='PST' definierte Verwendung ist nicht wirklich in der PST-Zeitzone, hat aber die Systemzeitzone geerbt.

Vergleichen Sie dies mit den Daten, die wir über das Land \ Stadt definiert:

> as.numeric(pst.country.city) 
[1] 1294670700 
> pst.country.city 
[1] "2011-01-10 06:45:00 PST" 

Also, nur die Daten, die wir mit Land/Stadt Informationen hat die richtige Zeitzone Informationen explizit codieren.

+1

Wenn ich darüber nachdenke, ist das wirklich merkwürdig, denn das Zeug, das ich mit der Länder-/Ortsnotation kodiert habe, hat jetzt die korrekte Abkürzung. POSIXct macht meinen Kopf. –

+0

danke. das hat es getan. Ursprünglich benutzte ich 'US/Eastern' 'US/Pacific', aber da es als EST/PST gedruckt wurde, wechselte ich irgendwann versehentlich zu diesen, ohne darüber nachzudenken. – vc273

3

Es ist, weil tz="PST" bedeutet etwas anderes als das, was Sie denken, es auf Ihrem System der Fall ist. Unter Linux finden Sie wahrscheinlich die Liste der verfügbaren vollständigen Namen in /usr/share/zoneinfo/zone.tab. Für meine Linux-Distribution mit tz='America/Los_Angeles' funktioniert.

Sie finden weitere Informationen, wenn Sie ?Sys.timezone eingeben.

+0

Darüber hinaus ist EDT ebenfalls zweideutig und man sollte 'EST5EDT' verwenden, um eine Verwechslung mit den kanadischen und antipodischen Nachahmern zu vermeiden. –

Verwandte Themen