我想从一POSIX日期减去1天,在大约DST的同时结束。

例如,当我添加天:

> as.POSIXct('2009-03-08 23:00:00.000') + 86400
[1] "2009-03-09 23:00:00 EDT"

但是,当我走过去,它抵消了:

> as.POSIXct('2009-03-08 23:00:00.000') - 86400
[1] "2009-03-07 22:00:00 EST"

什么是对付身边DST绝对时间差的最好方法?一般我通过将倍成字符串,并用它们处理分开,使得DST不施加处理这个

有帮助吗?

解决方案

您的代码做什么你问它做的,因为你没有要求它增加或减少某一天,你问它来增加或减少的24小时的。 2009-03-08 23:00:00 EDT 24小时(86400秒)之前的 2009-03-07 22:00:00 EST。我不熟悉的R库,但我熟悉的POSIX功能,它们包裹。如果你把一个POSIXct,通过day 1降低其POSIXct属性,然后“再投”它POSIXlt(确保如二月 - 一次成为1月31日),那么你应该能够减去1天可靠。

其他提示

存储日期时间为UTC - 或在这种情况下转换为UTC减去一天转换回本地时间。 (这忽略闰秒)

感谢霍布斯!我需要做一些更多的工作,但是从当天插槽减去POSIXlt作品:

> a <- as.POSIXct('2009-03-08 23:00:00.000')
> as.POSIXlt(a)
[1] "2009-03-08 23:00:00 EDT"
> a <- as.POSIXlt(a)
> a$mday <- a$mday -1
> a
[1] "2009-03-07 23:00:00 EDT"

如果你只是想数着日子,你可以使用trunc只移动日:

> trunc(Sys.time(), "day") + 86400
[1] "2009-09-13 PDT"
> trunc(Sys.time(), "day") - 86400
[1] "2009-09-11 PDT"

在包lubridate提供指定什么是在基本包有些不清楚两个附加的时间跨度类。从Tha手册:

持续时间

持续时间测量的两个时刻之间发生时间的确切量。如果一个闰秒,闰年,或在日光节约时间变化(DST)的间隔时发生此可以创建相对于时钟倍意想不到的效果。

期间测量在两个时刻之间发生的时钟时间的变化。期间提供的闰秒,闰年的存在的时钟时间健壮的预测,和改变DST。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top