我有一年,ISO周和工作日(2015年,第7周,工作日1 = 2015-02-09),我想将其转换为日期。
所以我按照以下方式做到:
date <- "2015:7:1"
as.Date(date, format="%Y:%V:%u")
[1] "2015-03-25"
正如你所看到的,我得到了错误的约会(今天就是这样)。 当使用另一个格式字符串(%U或%W而不是%V)时,我得到&#34; 2015-02-16&#34;结果 - 一周太晚了,因为%U和%W从0开始计算周数。
%V我错过了什么?
答案 0 :(得分:4)
问题是您可以使用%V
输出,但不能输入。请注意? strptime
:
%V: 一年中的一周作为ISO 8601中定义的十进制数(01-53)。如果包含1月1日的一周(从星期一开始)在新的一年中有四天或更多天,那么它被认为是第1周。否则,它是上一年的最后一周,下一周是第1周。(接受但输入时忽略。)
所以,这意味着您应该使用%W
并减去一周:
as.Date("2015:7:1", format = "%Y:%W:%u") - 7
[1] "2015-02-09"
然后注意输出允许%V
:
strftime(as.Date("2015:7:1", format = "%Y:%W:%u") - 7, "%Y:%V:%u")
[1] "2015:07:1"
答案 1 :(得分:0)
我要谨慎。建议的计算方法并不总能正常工作,例如:
isoyear = c(2015, 2015)
isoweek = c(52, 53)
iyw=paste(isoyear,isoweek,1,sep=":")
as.Date(iyw, format = "%Y:%W:%u") - 7
[1] "2015-12-21" NA
但如果我们检查&#34; 2015-12-31&#34;的isoweek,我们会得到以下信息:
isoweek("2015-12-28")
[1] 53
最好使用ISOweek包中的ISOweek2date()功能。