rがそのような結果を下に与える理由を誰にも教えてもらえますか?
> as.POSIXct("2013-01-01 08:00")
[1] "2013-01-01 08:00:00 HKT"
> as.Date(as.POSIXct("2013-01-01 08:00"))
[1] "2013-01-01"
> as.POSIXct("2013-01-01 07:00")
[1] "2013-01-01 07:00:00 HKT"
> as.Date(as.POSIXct("2013-01-01 07:00"))
[1] "2012-12-31"
2013-01-01
のPOSIXct
をDate
に変換した後、2013-01-01 07:00
であってはなりません。カットオフを08:00
から00:00
に変更する方法はありますか?
私は次のことが私の問題を解決できることを発見しましたが、あまりきちんとした方法ではありません
> as.Date(as.character(as.POSIXct("2013-01-01 07:00")))
[1] "2013-01-01"
ここでの問題はタイムゾーンです-_"HKT"
_にいることがわかります。試してください:
_as.Date(as.POSIXct("2013-01-01 07:00", 'GMT'))
[1] "2013-01-01"
_
?as.Date()
から:
["
POSIXct
"は、指定されたタイムゾーンの時刻の表現で、真夜中以降の時刻を無視することにより、デフォルトのUTCに変換されます。
as.Date
のタイムゾーンパラメーターを使用します。
as.Date(as.POSIXct("2013-01-01 07:00",tz="Hongkong"))
#[1] "2012-12-31"
as.Date(as.POSIXct("2013-01-01 07:00",tz="Hongkong"),tz="Hongkong")
#[1] "2013-01-01"
実際、日時変換関数を使用するときは、常にtz
パラメーターを使用することをお勧めします。他にも厄介な驚きがあります。夏時間。
これは、同時UTC時間がPOSIXct日付の午前0時より前(3番目の例)または午前0時以降に文書化され、以前に説明されたとおりに発生します。自分で数学を見るには、コンソールで「as.Date.POSIXct」を調べてください。デフォルトのtz = "UTC"の下の数学は明確です。デフォルト以外の場合、Rは基本的にas.Date.POSIXltを呼び出し、「date-travel」は発生しません。実際、「lt」オブジェクトで開始した場合、この問題は発生しませんでした。
as.Date(as.POSIXlt( "2013-01-01 07:00"、tz = "Hongkong"))
[1] "2013-01-01"
最も簡単な回避策は、tz = ""でas.Dateを呼び出して、問題の少ないas.Date.POSIXltアルゴリズムを強制的に使用することです。
as.Date(as.POSIXct( "2013-01-01 07:00")、tz = "")
[1] "2013-01-01"