2013-03-11 232 views
3

对于我正在使用的系统,我需要有一个“双周数”,它与标准周数一样工作,它只是每14天而不是7天滚动。如何根据日期计算“周数”?

换句话说, m查找算法,而不是代码,从一个日期计算一个星期数,以及给定年份和星期数的开始/结束日期。

问题来自于这样一个事实,即任何一年的第一周通常都不是1月1日,而且甚至可能在前一年的12月。因为这个原因,最后还有53周。

例如:

  • 第1周2009年开始 -12-29
  • 因此2009年有一个星期的#53,从2009-12-28到2010-01-03
  • 第1周2010年开始于2010-01-04

这些数字是如何派生的?

回答

2

这些数字是如何派生的?

嗯,这取决于你使用的是什么系统,但我怀疑你是ISO-8601的周数,它是这样定义后:

2.2.10日历周编号

根据一年的第一个日历周是包括该年的第一个星期四和日历年的最后一个日历周的规则在其日历年内标识日历星期的序号是紧接第一个日历周之前的那周所以表达“第一个星期四”规则的另一种方式是,在今年的第一周是 - 记下一日历年

熊,在ISO-8601,每周从星期一开始和结束上周日的第一周至少包含新年的四天。

另一个重要的一点是,当你使用表达“一周的星期”的价值观,你需要使用“一周年”本身以及,正常年份。因此,对于2010年1月3日的周日,您可以将其表述为“第53周,2009年周周日周日”。使用“错误类型的一年”非常容易,最终会在12月底和1月份开始时搞乱价值。

+0

酷,这是有道理的......我有点希望它会以某种方式定义为基于“一个时代,然后我们从那里继续增加几周”。每年的稳定性比我预期的要稳定得多......关于如何将这个转换为“两周数字”的任何想法,在那里我可能会有一个奇怪的开始到一年? 谢谢! – 2013-03-11 14:05:21

+1

@DanielMagliola:不需要,你需要为自己定义 - 或者更确切地说,无论谁给了你这个任务来满足一组具体的需求。 – 2013-03-11 14:08:10

+0

对于两周计算的一个想法是,您必须根据您使用的“日历”的不同来定义两周。在这种情况下,对于“周年”日历,两周实际上很容易计算。困难在于它没有完全映射到“正常”日历的年度边界(因为“正常”日历和“周年”日历中的年份边界不同) – cdeszaq 2014-03-05 21:06:31