每隔一段时间我就会发现一个真正令人头疼的问题......任何想法在这里发生了什么?
> a = strptime("2003-11-01", "%Y-%m-%d")
> b = strptime("2004-01-31", "%Y-%m-%d")
> unlist(a)
sec min hour mday mon year wday yday isdst
0 0 0 1 10 103 6 304 0
> unlist(b)
sec min hour mday mon year wday yday isdst
0 0 0 31 0 104 6 30 0
> a$mon = a$mon-1
> b$mon = b$mon-1
> a=as.POSIXlt(as.POSIXct(a))
> b=as.POSIXlt(as.POSIXct(b))
> a
[1] NA
> b
[1] "2003-12-31 PST"
> unlist(a)
sec min hour mday mon year wday yday isdst
NA NA NA NA NA NA NA NA -1
> unlist(b)
sec min hour mday mon year wday yday isdst
0 0 0 31 11 103 3 364 0
为什么我可以编辑b但不能编辑?我觉得我必须遗漏一些东西。
答案 0 :(得分:4)
当你减去一个月时,你的a
日期在技术上是dst。除非您也更改isdst
属性,否则它不是有效日期。
> a <- strptime("2003-11-01", "%Y-%m-%d")
> a2 <- a
> a$mon <- a$mon - 1
> as.POSIXct(a)
[1] NA
> a2$mon <- a2$mon - 1
> a2$isdst <- 1
> as.POSIXct(a2)
[1] "2003-10-01 EDT"
答案 1 :(得分:3)
这个(a
)适用于R和会话详细信息,如下所示:
> a$mon = a$mon-1
> a=as.POSIXlt(as.POSIXct(a))
> a
[1] "2003-10-01 01:00:00 BST"
> unlist(a)
sec min hour mday mon year wday yday isdst
0 0 1 1 9 103 3 273 1
根据您的区域设置和时区设置等没有任何进一步的信息,我必须在您的区域设置/时区猜测{/ 1}} 指示的日期/时间之后从a
元素中减去1不存在。 R对这些事情非常聪明,但是时区和地区通常会让人们失望。
真正的问题是,为什么在处理日期时使用日期/时间对象?
在这个例子中,$mon
就足够了。
我的R会议详情:
a <- as.Date("2003-11-01", "%Y-%m-%d")