6

POSIXct の仕組みなどを理解してはいけないと思います。私が理解している限り、それはエポックから数秒であり、エポックは 1970-01-01 GMT のような標準時間です。

同じ絶対時間である 2 つの POSIXct を EST で 1 つ、PST で 1 つ掛けます。しかし、それらを数値に変換すると、結果が異なります...誰かが私が間違っていることを教えてくれますか?

> 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

ここに私のセッション情報があります:

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

2 に答える 2

5

タイムゾーン名は思ったほど単純ではありません。背景についてはhttp://en.wikipedia.org/wiki/Tz_databaseを、使用されている名前のリストについてはhttp://en.wikipedia.org/wiki/List_of_tz_database_time_zonesを参照してください。最良の方法は、 tz = 'country / city'表記法を使用し、ローカル システムのタイム ゾーンを明示的に設定することです。

そのため、タイム ゾーンをエンコードするために 2 つの異なる方法を使用するスクリプトを次に示します。

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')

PST にしたい POSIXct 値を見ると、実際には 2 つの異なる値があることがわかります。略語 ( tz ='PST') から始めると、次のようになります。

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

を使用して定義したデータはtz='PST'、実際には PST タイムゾーンではなく、システムのタイムゾーンを継承していることがわかります。

これを、country\city を使用して定義したデータと比較します。

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

そのため、国/都市情報で明示的にエンコードされたデータのみが正しいタイムゾーン情報を持ちます。

于 2013-08-09T23:31:26.333 に答える