0

我有一个 POSIXct 对象的向量:

> dates <- seq(as.POSIXct("2004-01-01", tz="EST"), as.POSIXct("2004-01-02", tz="EST"), as.difftime(6, units="hours"))
> dates
[1] "2004-01-01 00:00:00 EST" "2004-01-01 06:00:00 EST"
[3] "2004-01-01 12:00:00 EST" "2004-01-01 18:00:00 EST"
[5] "2004-01-02 00:00:00 EST"

我创建了一个epoch变量,它为UNIX epoch定义了一个 POSIXct 对象:

> epoch <- strptime("1970-01-01 00:00:00", "%Y-%m-%d %H:%M:%S", tz="EST")
> class(epoch)
[1] "POSIXct" "POSIXt"  
> epoch
[1] "1970-01-01 EST"

然后我循环遍历dates向量并打印出从 偏移的值epoch

> for (d in dates) { print(as.POSIXct(d, origin=epoch, tz="EST")) }
[1] "2004-01-01 05:00:00 EST"
[1] "2004-01-01 11:00:00 EST"
[1] "2004-01-01 17:00:00 EST"
[1] "2004-01-01 23:00:00 EST"
[1] "2004-01-02 05:00:00 EST"

dates对于epoch.

EST 和 UTC 之间有 +5 小时的差异,但我epoch使用该tz选项指定了 EST 时区。打印出来epoch,好像没有时间信息,只有日期。

or是否有错误,strptime或者as.POSIXct我计算偏移量或生成epoch不正确?

4

1 回答 1

1

正如答案中提到的For 循环样式对类强制有影响?,在for循环中,您的日期将转换为数字。这是自“标准”时代以来的秒数。这包括 EST 和 UTC 之间的 5 小时班次。这将作为偏移量添加到您的epoch. 见的来源as.POSIXct.numeric

以下确实有效,因为它设置的日期在转换为数字时将是正确的秒数。

dates <- seq(as.POSIXct("2004-01-01", tz="UTC"), 
             as.POSIXct("2004-01-02", tz="UTC"), 
             as.difftime(6, units="hours"))
epoch <- strptime("1970-01-01 00:00:00", "%Y-%m-%d %H:%M:%S", tz="EST")

for (d in dates) { print(as.POSIXct(d, origin=epoch, tz="EST")) }

这使

[1] "2004-01-01 EST"
[1] "2004-01-01 06:00:00 EST"
[1] "2004-01-01 12:00:00 EST"
[1] "2004-01-01 18:00:00 EST"
[1] "2004-01-02 EST"
于 2012-01-06T00:22:53.417 回答