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 POSIX日期时间的奇怪行为_R_Date_Posix_Posixct - Fatal编程技术网

R POSIX日期时间的奇怪行为

R POSIX日期时间的奇怪行为,r,date,posix,posixct,R,Date,Posix,Posixct,POSIX对象的这种行为让我感到困惑。我创建了两个POSIX日期时间向量,一个是POSIXct,另一个是POSIXlt,它们具有相同的日期和时间。它们在%中的==方面相同,但在%中的%方面不同,如下所示 d.ch = c("2016-09-26 0:00:00", "2016-09-26 1:00:00", "2016-09-26 2:00:00", "2016-09-26 3:00:00", "2016-09-26 4:00:00") d1 = strptime(d.ch, format="%

POSIX对象的这种行为让我感到困惑。我创建了两个POSIX日期时间向量,一个是POSIXct,另一个是POSIXlt,它们具有相同的日期和时间。它们在%中的
==
方面相同,但在%中的
%方面不同,如下所示

d.ch = c("2016-09-26 0:00:00", "2016-09-26 1:00:00", "2016-09-26 2:00:00", "2016-09-26 3:00:00", "2016-09-26 4:00:00")
d1 = strptime(d.ch, format="%Y-%m-%d %H:%M:%S") # POSIXlt
d3 = seq(from=ISOdatetime(2016,9,26,0,0,0), 
     length.out=5, by="hour") # POSIXct
d1 == d3
[1] TRUE TRUE TRUE TRUE TRUE
但是


为什么?

只要将
strtime()
结果转换为
POSIXct
就可以了

或者如果您使用默认情况下也会创建
POSIXct
anytime()

R> library(anytime)
R> d1 <- anytime(c("2016-09-26 00:00:00", "2016-09-26 01:00:00", 
+  "2016-09-26 02:00:00", "2016-09-26 03:00:00", "2016-09-26 04:00:00"))
R> d1
[1] "2016-09-26 00:00:00 CDT" "2016-09-26 01:00:00 CDT" "2016-09-26 02:00:00 CDT" 
[4] "2016-09-26 03:00:00 CDT" "2016-09-26 04:00:00 CDT"
R> d3 <- seq(from=ISOdatetime(2016,9,26,0,0,0), length.out=5, by="hour") # POSIXct
R> d3
[1] "2016-09-26 00:00:00 CDT" "2016-09-26 01:00:00 CDT" "2016-09-26 02:00:00 CDT" 
[4] "2016-09-26 03:00:00 CDT" "2016-09-26 04:00:00 CDT"
R> d1 == d3
[1] TRUE TRUE TRUE TRUE TRUE
R> d1 %in% d3
[1] TRUE TRUE TRUE TRUE TRUE
R> 
R>库(随时)
R> 首被告
[1] “2016-09-26 00:00:00 CDT”“2016-09-26 01:00:00 CDT”“2016-09-26 02:00:00 CDT”
[4] “2016-09-26 03:00:00 CDT”“2016-09-26 04:00:00 CDT”
R> d3 d3
[1] “2016-09-26 00:00:00 CDT”“2016-09-26 01:00:00 CDT”“2016-09-26 02:00:00 CDT”
[4] “2016-09-26 03:00:00 CDT”“2016-09-26 04:00:00 CDT”
R> d1==d3
[1] 真的真的真的
R> d1%在%d3中
[1] 真的真的真的
R>
因为
anytime()
迭代一组预先编码的格式,所以我必须在小时格式中添加一个零,使其与常规的等时格式类似


(哦,CDT正好是我的时区。)

如果您只需将
strtime()
结果转换为
POSIXct
,这一切都可以实现

或者如果您使用默认情况下也会创建
POSIXct
anytime()

R> library(anytime)
R> d1 <- anytime(c("2016-09-26 00:00:00", "2016-09-26 01:00:00", 
+  "2016-09-26 02:00:00", "2016-09-26 03:00:00", "2016-09-26 04:00:00"))
R> d1
[1] "2016-09-26 00:00:00 CDT" "2016-09-26 01:00:00 CDT" "2016-09-26 02:00:00 CDT" 
[4] "2016-09-26 03:00:00 CDT" "2016-09-26 04:00:00 CDT"
R> d3 <- seq(from=ISOdatetime(2016,9,26,0,0,0), length.out=5, by="hour") # POSIXct
R> d3
[1] "2016-09-26 00:00:00 CDT" "2016-09-26 01:00:00 CDT" "2016-09-26 02:00:00 CDT" 
[4] "2016-09-26 03:00:00 CDT" "2016-09-26 04:00:00 CDT"
R> d1 == d3
[1] TRUE TRUE TRUE TRUE TRUE
R> d1 %in% d3
[1] TRUE TRUE TRUE TRUE TRUE
R> 
R>库(随时)
R> 首被告
[1] “2016-09-26 00:00:00 CDT”“2016-09-26 01:00:00 CDT”“2016-09-26 02:00:00 CDT”
[4] “2016-09-26 03:00:00 CDT”“2016-09-26 04:00:00 CDT”
R> d3 d3
[1] “2016-09-26 00:00:00 CDT”“2016-09-26 01:00:00 CDT”“2016-09-26 02:00:00 CDT”
[4] “2016-09-26 03:00:00 CDT”“2016-09-26 04:00:00 CDT”
R> d1==d3
[1] 真的真的真的
R> d1%在%d3中
[1] 真的真的真的
R>
因为
anytime()
迭代一组预先编码的格式,所以我必须在小时格式中添加一个零,使其与常规的等时格式类似


(哦,CDT正好是我的时区。)

这两个
POSIXct
POSIXlt
都继承自虚拟
POSIXt
类。这就是当一个对象是
POSIXct
而另一个对象是
POSIXlt
时,允许诸如
==
+
-
等二进制运算符工作的原因。这些二进制函数查看其参数的类


%in%
调用
match
,它从表中查找值。没有S3方法调度来利用
POSIXt
虚拟类,因此您得到了
FALSE

向量
POSIXct
POSIXlt
都继承自虚拟
POSIXt
类。这就是当一个对象是
POSIXct
而另一个对象是
POSIXlt
时,允许诸如
==
+
-
等二进制运算符工作的原因。这些二进制函数查看其参数的类


%in%
调用
match
,它从表中查找值。没有S3方法调度来利用
POSIXt
虚拟类,因此得到的向量
FALSE

d1
似乎是POSIXlt,而d3似乎是POSIXct。可能
=
正在执行一些隐式强制。请查看
属性(d1)
属性(d3)
POSIXlt
类与列表的共同点大于与向量的共同点。事实上,我的理解是,这就是POSIXlt`中的
l
所代表的,而
POSIXct
中的
c
是对用于生成向量的
c
函数的引用。(我相信还有一个更技术性的解释)您可以调查
lubridate
作为替代方案。它使许多日期/时间对象保持一致。
d1
似乎是POSIXlt,而d3似乎是POSIXct。可能
=
正在执行一些隐式强制。请查看
属性(d1)
属性(d3)
POSIXlt
类与列表的共同点大于与向量的共同点。事实上,我的理解是,这就是POSIXlt`中的
l
所代表的,而
POSIXct
中的
c
是对用于生成向量的
c
函数的引用。(我相信还有一个更技术性的解释)您可以调查
lubridate
作为替代方案。它使许多日期/时间对象保持一致。感谢您随时建议
,效果非常好。但这似乎告诉我POSIXlt和POSIXct并不真正兼容,这是一个讽刺。不,这不是一个好的方式来看待它——阅读
帮助(DateTimeClass)
。我认为
POSIXlt
是一种列表类型,允许我访问组件,和
POSIXct
作为紧凑型,适用于data.frames或xts索引等中的单列。它们是相同基础信息的不同表示形式,但由于它们在设计上不同,您无法完成您在问题中尝试的操作。我刚刚发布了另一个问题,以寻求何时使用哪种方法的指导日期时间类型。你能详细解释一下POSIX的语义吗?你甚至还没有接受这个,现在还指望我按需“跳”到另一个吗?哦,我看到了另一个,并且是关闭它的人之一。你的前提是错误的,我需要重复我的建议去阅读
help(DateTimeClasses)
。R真的是一个很好的工具,虽然文档可能很密集,但它会给你带来回报的。感谢你随时建议
,效果很好。但这似乎告诉我POSIXlt和POSIXct并不真正兼容,这是一个讽刺。不,这不是一个好的方式来看待它——阅读
帮助(DateTimeClass)
。我认为
POSIXlt
是一种列表类型,允许我访问组件,
POSIXct
是一种紧凑类型,适用于data.frames或xts索引等中的单列。它们是dif