2个iso8601日期之间的周数

时间:2016-12-16 15:16:12

标签: c# datetime iso8601

如何仅使用周数和年数来计算2个ISO8601日期之间的周数?

输入: YEAR1 week1 YEAR2 week2

输出: 根据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;
}

1 个答案:

答案 0 :(得分:4)

创建与两周的星期一相对应的DateTime值。有关如何执行此操作,请参阅Calculate date from week number。减去这些以获得TimeSpan的差异。请求其Days属性获取天数差异。除以7得到差异数周。