センサーからの水文データでも同様の問題がありました。私のタイムスタンプはUTC+1(CET)であり、夏時間(UTC + 2、CEST)に切り替わりませんでした。データを1時間オフにしたくなかったので(UTCが使用された場合はそうなります)、の%z
変換仕様を採用しstrptime
ました。?strptime
あなたは見つけるでしょう:
%z
UTCからの時間と分での符号付きオフセット。したがって、-0800はUTCから8時間遅れています。
例:2012年、標準時からDSTへの切り替えは2012-03-25に行われたため、この日の02:00はありません。「2012-03-2502:00:00」をPOSIXct-Objectに変換しようとすると、
> as.POSIXct("2012-03-25 02:00:00", tz="Europe/Vienna")
[1] "2012-03-25 CET"
エラーや警告は表示されず、時刻なしで日付が表示されます(この動作は文書化されています)。
を使用format = "%z"
すると、目的の結果が得られます。
> as.POSIXct("2012-03-25 02:00:00 +0100", format="%F %T %z", tz="Europe/Vienna")
[1] "2012-03-25 03:00:00 CEST"
このインポートを容易にするために、適切なデフォルト値を使用して小さな関数を作成しました。
as.POSIXct.no.dst <- function (x, tz = "", format="%Y-%m-%d %H:%M", offset="+0100", ...)
{
x <- paste(x, offset)
format <- paste(format, "%z")
as.POSIXct(x, tz, format=format, ...)
}
> as.POSIXct.no.dst(c("2012-03-25 00:00", "2012-03-25 01:00", "2012-03-25 02:00", "2012-03-25 03:00"))
[1] "2012-03-25 00:00:00 CET" "2012-03-25 01:00:00 CET" "2012-03-25 03:00:00 CEST"
[4] "2012-03-25 04:00:00 CEST"