【发布时间】:2016-12-16 15:16:12
【问题描述】:
您如何仅使用周数和年份数来计算 2 个 ISO8601 日期之间的周数?
输入: 第一年 第1周 第 2 年 第2周
输出: 符合 ISO8601 的周数
我可以计算一年中的周数:
public static int AmountOfWeeksInYearIso8601(this DateTime dateTime)
{
var year = dateTime.Year;
var g = Math.Floor((year - 100d) / 400d) - Math.Floor((year - 102d) / 400d);
var h = Math.Floor((year - 200d) / 400d) - Math.Floor((year - 199d) / 400d);
var f = 5 * year + 12 - 4 * (Math.Floor(year / 100d) - Math.Floor(year / 400d)) + g + h;
return f % 28 < 5 ? 53 : 52;
}
【问题讨论】:
-
这有点令人困惑,因为周数和年份不能构成一个日期 - 你能再澄清一下你的问题吗?
-
@stuartd "allowing for the years" 足以让这件事变得不平凡:它需要弄清楚哪些年份有 52 周,哪些年份有 53 周。
-
@stuartd 在 ISO 周编号中,可能会落在下一年的第 1 周。
-
@hvd 好的,我放弃了 :)
-
@Liam 这是关于 ISO 8601 年-月-日格式,而不是 ISO 8601 年-周格式。相同的 ISO 标准,非常不同的问题。 :)