Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 为什么纪元日期正确,但不能作为POSIXct对象的偏移?_R_Date_Posix_Epoch_Posixct - Fatal编程技术网

R 为什么纪元日期正确,但不能作为POSIXct对象的偏移?

R 为什么纪元日期正确,但不能作为POSIXct对象的偏移?,r,date,posix,epoch,posixct,R,Date,Posix,Epoch,Posixct,我有一个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

我有一个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"
然后,我循环遍历
日期
向量并打印出值,偏移量为
历元

> 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"
相对于
历元
日期
中的值与这些相同值的表示之间似乎存在五个小时的偏移误差

EST和UTC之间相差+5小时,但我使用
tz
选项为
epoch
指定了EST时区。打印出
epoch
,似乎没有时间信息,只有日期


strtime
as.POSIXct
是否存在错误,或者我计算偏移量或生成的
epoch
不正确?

如回答中所述,在
for
循环中,您的日期被转换为数字。这是自“标准”纪元以来的秒数。这包括东部标准时间和UTC之间的5小时轮班。作为偏移量添加到
历元中。请参见
的源代码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")) }

(-)五个小时在您的纪元中,UNIX纪元是GMT而不是EST。你为什么要这么做<代码>日期
已经是一个值得尊敬的POSIXct/POSIXt对象。在这里,我将历元定义为相对于EST的,而不是相对于GMT。因此,对于EST日期的偏移量不需要进行校正(除非我误解了
strTime
的工作原理)。我正在探索这个问题,我很好奇为什么我得到了错误的答案:
strtime
确实返回了一个
POSIXct
,请参见
?strtime
。当我看
?strtime
时,它会说(在详细信息部分):“
strtime
将字符向量转换为类
POSIXlt
”。这是R-2.14.1。这与我看到的返回值一致(通过
class(epoch)
dput(epoch)
)。我使用的是R-2.13.0(2011-04-13),对
strtime
的描述如下:“在字符表示和类的对象“POSIXlt”和“POSIXct”之间转换的函数“'表示日历日期和时间。”当我运行
class(epoch)
时,它返回我期望的类型(
POSIXct
)。我没有意识到返回值已更改。我编辑了我的答案,以删除关于该类型的错误注释。
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"