如何使用日期获得周数的正常定义

时间:2015-05-13 00:35:38

标签: date julia

新年快乐!这是1月1日。这周是几周?大多数人会说这是一年中的第一周。但不是朱莉娅:

using Dates
for i=2000:2015
    println(Date(i), ": first week is ", Dates.week(Date(i)))
end

结果

2000-01-01: first week is 52
2001-01-01: first week is 1
2002-01-01: first week is 1
2003-01-01: first week is 1
2004-01-01: first week is 1
2005-01-01: first week is 53
2006-01-01: first week is 52
2007-01-01: first week is 1
2008-01-01: first week is 1
2009-01-01: first week is 1
2010-01-01: first week is 53
2011-01-01: first week is 52
2012-01-01: first week is 52
2013-01-01: first week is 1
2014-01-01: first week is 1
2015-01-01: first week is 1

是否有一种简单的方法可以获得任意一年中任意日期的周数,计算第一天的第一天和每周日开始新的一周?

编辑:澄清为什么我不能只使用div(Dates.dayofyear(x),7)+1

2 个答案:

答案 0 :(得分:4)

Julia Dates模块遵循"周",ISO-Week(参见herehere)的最常见标准定义。

通常的做法是将算法/函数包含在核心语言中,否则这些算法/函数会在一个人自己的语言中实现。在这种情况下,请将ISO-Week algorithm与您建议的内容进行比较:

week(dt::Date) = div(Dates.dayofyear(x),7)+1

答案 1 :(得分:1)

我最终做的事情看起来像这样

using Dates
function getWWFromDate(date)
    year = Dates.year(date+Dates.Day(6))
    #How many days since the start of the first ww of the year
    startOfFirstWW = Dates.firstdayofweek(Date(year)) - Dates.Day(1)
    #How many days from the current date to that day?
    doy = Dates.days(date-startOfFirstWW)
    ww = floor(doy/7)+1
    return year*100+ww
end

for i=2000:2015
    td = Date(i,1,1)
    println(td, ": Week is ", ourWeekNumber(td) )
end

基本上,每当我想要给定日期的一周时,我都会调用此函数而不是Dates.week

编辑:我也最终需要反向。下面的函数需要一年,WW的形式为YYYYWW,如201501,并使用此定义返回该周的第一天(在本例中为2014-12-28)

function getDateFromWW(yearww)
    year = floor(yearww/100)
    ww = yearww%100
    Dates.firstdayofweek(Date(year)) - Dates.Day(1) + Dates.Week(ww-1)
End