【发布时间】:2017-06-03 03:03:06
【问题描述】:
我正在将基于周的日期转换为基于月的日期。
在检查我的工作时,我在我的数据中发现了以下问题,这是对as.Date()的简单调用的结果
as.Date("2016-50-4", format = "%Y-%U-%u")
as.Date("2016-50-5", format = "%Y-%U-%u")
as.Date("2016-50-6", format = "%Y-%U-%u")
as.Date("2016-50-7", format = "%Y-%U-%u") # this is the problem
前面的代码为前 3 行生成正确的日期:
"2016-12-15"
"2016-12-16"
"2016-12-17"
然而,最后一行代码可以追溯到 1 周:
"2016-12-11"
谁能解释这里发生了什么?
【问题讨论】:
-
问题是 %u 从星期一开始,%U 从星期日开始,所以
as.Date("2016-50-7", format = "%Y-%U-%u")被解释为第 50 周的第一天(星期日)。请参阅?strptime进行验证。 -
在@Imo 的评论之后,
as.Date("2016-50-7", format = "%Y-%V-%u")似乎有效,但在几年内会产生与您的示例不同的结果 - 这有多重要可能取决于您的应用程序 -
@Miff 在我的计算机上导致
"2016-01-18"这不是正确的日期 -
@Miff 在我的电脑上我得到相同的结果 Jaap 提到的“2016-01-18”,对于所有输入行,即:“2016-50-4”等等
-
@lmo,我想说
as.Date("2016-50-7", format = "%Y-%U-%u")被解释为第 50 周的第七天(星期日)