yearmonの日付 ( zooパッケージから) を UTC タイムゾーンの POSIXct に変換しようとしています。これは私がやろうとしたことです:
> as.POSIXct(as.yearmon("2010-01-01"), tz="UTC")
[1] "2010-01-01 01:00:00 CET"
日付を変換すると同じ結果が得られます。
> as.POSIXct(as.Date("2010-01-01"),tz="UTC")
[1] "2010-01-01 01:00:00 CET"
それを機能させる唯一の方法は、文字を引数として渡すことです。
> as.POSIXct("2010-01-01", tz="UTC")
[1] "2010-01-01 UTC"
DateTimeClasses、tzset、およびtimezonesのドキュメントを調べました。私の /etc/localtime はヨーロッパ/アムステルダムに設定されています。TZ 環境変数を設定する以外に、tz を UTC に設定する方法が見つかりませんでした。
> Sys.setenv(TZ="UTC")
> as.POSIXct(as.Date("2010-01-01"),tz="UTC")
[1] "2010-01-01 UTC"
yearmon または Date から POSIXct を作成するときにタイムゾーンを直接設定することは可能ですか?
編集:
関数は .POSIXct.yearmon として確認しました。これは as.POSIXct.Date に渡されます。
> zoo:::as.POSIXct.yearmon
function (x, tz = "", ...)
as.POSIXct(as.Date(x), tz = tz, ...)
<environment: namespace:zoo>
ジョシュアが言うように、タイムゾーンは as.POSIXct.Date で失われます。今のところ、リッチーの提案を使用して、次を使用して手動で tzone を設定します。
attr(x, "tzone") <- 'UTC'
これは、Grothendieck と Dwin が提案したように内部ではなく、プレゼンテーションにのみ使用される失われた tzone の問題を解決します。