使用 POSIXct 的奇数时间间隔
Odd time gaps using POSIXct
我可能在 2017-10-01 凌晨发现了时间流逝中的一个奇怪的差距。我有一些陈旧的代码,我经常使用这些代码创建 30 分钟的间隔来总结和绘制计数观察结果。时间间隔从日落前后开始,到黎明前后结束 - 因此日期在午夜更改。对于我想输入的几乎任何一对日期 ('night'),我的代码都可以正常工作。但是对于 2017-09-30 的晚上,它跳过了两个间隔 02:00 和 02:30。下面的代码。
missing.times <- data.frame(isotime2=seq(as.POSIXct("2017-09-30 17:30:00", format="%Y-%m-%d %H:%M:%S"), as.POSIXct("2017-10-01 06:30:00", format="%Y-%m-%d %H:%M:%S"), by="30 min")); missing.times #missing 0200 and 0230
all.okay <- data.frame(isotime2=seq(as.POSIXct("2017-10-01 17:30:00", format="%Y-%m-%d %H:%M:%S"), as.POSIXct("2017-10-02 06:30:00", format="%Y-%m-%d %H:%M:%S"), by="30 min")); all.okay
我尝试了一个偷偷摸摸的解决方法,但我最终还是产生了一个缺口。
#create intervals for the next date from midnight to 06:30
workaround <- data.frame(isotime2=seq(as.POSIXct("2017-10-02 00:00:00"), as.POSIXct("2017-10-02 06:30:00"), by="30 min")); workaround; str(workaround)
#substitute the following date for the time-gap date 2017-10-01
workaround$isotime2 <-gsub("2017-10-02", "2017-10-01", workaround$isotime2); workaround; str(workaround)
#change the vector "isotime2" from character to POSIXct magically makes time disappear
workaround$isotime2 <-as.POSIXct(workaround$isotime2, format="%Y-%m-%d %H:%M:%S"); workaround; str(workaround)
我是否以某种方式造成了这个时间间隔,或者 R 是否知道 space 时间内的弃牌?事情发生时我正在睡觉。
因为@ptenax 问得很好...
使用不随夏令时而改变的时区(让我们面对现实吧,编码时每个人的存在的祸根)。
第一个 data.frame 使用 Australia/ACT tz,它在凌晨 2 点改变,第二个 data.frame 使用 Austalia/Perth tz,它不会因夏令时而改变。
missing.times <- data.frame(isotime2=seq(as.POSIXct("2017-09-30 17:30:00", format="%Y-%m-%d %H:%M:%S", tz="Australia/ACT"), as.POSIXct("2017-10-01 06:30:00", format="%Y-%m-%d %H:%M:%S", tz="Australia/ACT"), by="30 min"))
nrow(missing.times)
missing.times
# misses 2:00 and 2:30
missing.times <- data.frame(isotime2=seq(as.POSIXct("2017-09-30 17:30:00", format="%Y-%m-%d %H:%M:%S", tz="Australia/Perth"), as.POSIXct("2017-10-01 06:30:00", format="%Y-%m-%d %H:%M:%S", tz="Australia/Perth"), by="30 min"))
nrow(missing.times)
missing.times
# does not miss 2:00 and 2:30
我可能在 2017-10-01 凌晨发现了时间流逝中的一个奇怪的差距。我有一些陈旧的代码,我经常使用这些代码创建 30 分钟的间隔来总结和绘制计数观察结果。时间间隔从日落前后开始,到黎明前后结束 - 因此日期在午夜更改。对于我想输入的几乎任何一对日期 ('night'),我的代码都可以正常工作。但是对于 2017-09-30 的晚上,它跳过了两个间隔 02:00 和 02:30。下面的代码。
missing.times <- data.frame(isotime2=seq(as.POSIXct("2017-09-30 17:30:00", format="%Y-%m-%d %H:%M:%S"), as.POSIXct("2017-10-01 06:30:00", format="%Y-%m-%d %H:%M:%S"), by="30 min")); missing.times #missing 0200 and 0230
all.okay <- data.frame(isotime2=seq(as.POSIXct("2017-10-01 17:30:00", format="%Y-%m-%d %H:%M:%S"), as.POSIXct("2017-10-02 06:30:00", format="%Y-%m-%d %H:%M:%S"), by="30 min")); all.okay
我尝试了一个偷偷摸摸的解决方法,但我最终还是产生了一个缺口。
#create intervals for the next date from midnight to 06:30
workaround <- data.frame(isotime2=seq(as.POSIXct("2017-10-02 00:00:00"), as.POSIXct("2017-10-02 06:30:00"), by="30 min")); workaround; str(workaround)
#substitute the following date for the time-gap date 2017-10-01
workaround$isotime2 <-gsub("2017-10-02", "2017-10-01", workaround$isotime2); workaround; str(workaround)
#change the vector "isotime2" from character to POSIXct magically makes time disappear
workaround$isotime2 <-as.POSIXct(workaround$isotime2, format="%Y-%m-%d %H:%M:%S"); workaround; str(workaround)
我是否以某种方式造成了这个时间间隔,或者 R 是否知道 space 时间内的弃牌?事情发生时我正在睡觉。
因为@ptenax 问得很好...
使用不随夏令时而改变的时区(让我们面对现实吧,编码时每个人的存在的祸根)。
第一个 data.frame 使用 Australia/ACT tz,它在凌晨 2 点改变,第二个 data.frame 使用 Austalia/Perth tz,它不会因夏令时而改变。
missing.times <- data.frame(isotime2=seq(as.POSIXct("2017-09-30 17:30:00", format="%Y-%m-%d %H:%M:%S", tz="Australia/ACT"), as.POSIXct("2017-10-01 06:30:00", format="%Y-%m-%d %H:%M:%S", tz="Australia/ACT"), by="30 min"))
nrow(missing.times)
missing.times
# misses 2:00 and 2:30
missing.times <- data.frame(isotime2=seq(as.POSIXct("2017-09-30 17:30:00", format="%Y-%m-%d %H:%M:%S", tz="Australia/Perth"), as.POSIXct("2017-10-01 06:30:00", format="%Y-%m-%d %H:%M:%S", tz="Australia/Perth"), by="30 min"))
nrow(missing.times)
missing.times
# does not miss 2:00 and 2:30