Datetime 为什么解析是%Y-%m“;在R中使用strTime会给出NA结果,但";%Y-%m-%d“;作品

Datetime 为什么解析是%Y-%m“;在R中使用strTime会给出NA结果,但";%Y-%m-%d“;作品,datetime,r,Datetime,R,我得到了一个在R中我不理解的结果 如果我使用strtime格式为%Y-%m的年份和日期(如“2009-12”),我会得到一个NA结果。但是如果我添加一天,比如“2009-12-01”,并相应地更改格式字符串,我会得到一个结果。例如: > strptime("2009-12",format="%Y-%m") [1] NA > strptime("2009-12-03",format="%Y-%m-%d") [1] "2009-12-03" 为什么呢 更新:我好奇的是,为什么strti

我得到了一个在R中我不理解的结果

如果我使用
strtime
格式为%Y-%m的年份和日期(如“2009-12”),我会得到一个NA结果。但是如果我添加一天,比如“2009-12-01”,并相应地更改格式字符串,我会得到一个结果。例如:

> strptime("2009-12",format="%Y-%m")
[1] NA
> strptime("2009-12-03",format="%Y-%m-%d")
[1] "2009-12-03"
为什么呢

更新:我好奇的是,为什么strtime不解析一年一个月,而它不解析一年一个月似乎很奇怪,因为它只解析一年或一年一天:

> strptime("2009",format="%Y") # year only. Works. Uses current month and day as defaults.
[1] "2009-12-02"
> strptime("2009-03",format="%Y-%d") # year and day. Works. Uses current month as default.
[1] "2009-12-03"
> strptime("2009-03",format="%Y-%m") # year and month. Doesn't work. ?
[1] NA
更新以解释这不是重复的原因
可能的副本是在这个问题提出几年后提出的,它与
R
中的一个单独的API有关:
asDate
函数。这个问题是关于
strtime
函数的一个怪癖,从
R
3.1.3开始,它仍然适用。

这对我来说似乎是明智的行为。在我看来,更好的问题是“为什么它允许您这样做:
strtime(“2009-03”,format=“%Y-%d”)
?”

下面是一个解决方法,可以获得我认为您正在尝试实现的目标(即具有指定月份和年份,但今天是日期的POSIXlt对象):


我只是在猜。但是如果它需要一年零一天,那么它可能需要一年零一天,范围在1-365(或者闰年是366)。您可以使用
paste()
并在末尾添加
-01
,以获得标准的
YYYY-MM-DD
格式

这是我做的测试

strptime("2009-123",format="%Y-%d")

返回“2009-05-12”

,因为日期有天?你期望它的输出是什么?你希望它成为一年中的一天吗?如果是这样,请尝试“%j”。我希望它使用当前日期作为默认值,就像使用strtime(“2009”,format=“%Y”)一样。这将导致“2009-12-01”。在这种情况下为什么不使用Sys.Date()?“2009-12”本身不是一个有效的日期。所以它只是语言的一个奇怪的特性?不,这是一个要求,因为“日期”表示一年中的一个月中的一天,而仅仅给出一个月和一年并不等同。但是,如果你只给出一年,或者仅仅给出一年和一天,为什么它会起作用呢?我的猜测是“这就是它的工作原理”(换句话说,没有很好的理由)。正如每个人都说的,你为什么要这样做根本没有什么意义。如果你想要今天的日期,请使用Sys.date().否则就照Shane上面的建议去做吧…我知道这个问题真的很老了,但我是在自己有同样问题的时候发现的。根据“对于strTime,输入字符串不需要完全指定日期:假定未指定的秒、分钟或小时为零,未指定的年、月或日为当前日期。”因此“似乎不需要您的解决方法”。
strptime("2009-123",format="%Y-%d")