Tob*_*ias 15
我对传感器的水文数据也有类似的问题.我的时间戳是UTC + 1(CET),并没有切换到夏令时(UTC + 2,CEST).因为我不希望我的数据关闭一小时(如果使用UTC就是这种情况)我采用了%z转换规范strptime.在?strptime你会发现:
%z以UTC为单位的小时和分钟的签名偏移,因此-0800比UTC低8小时.
例如:2012年,从标准时间到夏令时的转换发生在2012-03-25,所以当天没有02:00.如果您尝试将"2012-03-25 02:00:00"转换为POSIXct-Object,
> as.POSIXct("2012-03-25 02:00:00", tz="Europe/Vienna")
[1] "2012-03-25 CET"
Run Code Online (Sandbox Code Playgroud)
你没有得到错误或警告,你只是没有时间得到日期(记录这种行为).
使用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"
Run Code Online (Sandbox Code Playgroud)
为了方便这个导入,我写了一个带有适当默认值的小函数:
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"
Run Code Online (Sandbox Code Playgroud)
Jos*_*ich 12
如果您不想要夏令时,请转换为没有夏令时的时区(例如GMT,UTC).
times <- .POSIXct(times, tz="GMT")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9010 次 |
| 最近记录: |