一年中的一周 C# 日期时间
本文关键字:一周 日期 时间 一年 | 更新日期: 2023-09-27 18:30:55
我有以下代码来获取日期时间对象中给定的年份的周数
public static int WeeksInYear(DateTime date)
{
GregorianCalendar cal = new GregorianCalendar(GregorianCalendarTypes.Localized);
return cal.GetWeekOfYear(date, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
}
我给函数的日期为 1/1/2012,它应该返回第 1 周,但它返回第 52 周。我似乎想不通为什么。有人知道为什么吗?
该算法正在执行您指示它执行的操作。您已将 CalanderWeekRule 设置为 FirstFourDayWeek。2012 年 1 月 1 日不是前四天周的一部分,因此您已指示日历从 1 月 2 日开始计数。
根据周数计算日期
public static int WeeksInYear(DateTime date)
{
GregorianCalendar cal = new GregorianCalendar(GregorianCalendarTypes.Localized);
return cal.GetWeekOfYear(date, CalendarWeekRule.FirstDay, DayOfWeek.Monday);
我认为如果将CalendarWeekRule.FirstFourDayWeek更改为CalendarWeekRule.FirstDay,那么这将正常工作。
我改变了这个,然后它工作正常。
周数计算正确。您应该了解周数的实际计算/计数方式(维基百科?!
注意:周数计算的内置计算有问题。Microsoft知识库文章200299中描述了该问题。它在ISO-8601方面存在问题。
可以使用支持
ISO 8601 周编号的 .NET 时间段库的类周:
TimeCalendar calendar = new TimeCalendar(
new TimeCalendarConfig { YearWeekType = YearWeekType.Iso8601 } );
Week week = new Week( new DateTime( 2012, 01, 01 ), calendar );
Console.WriteLine( "week #: ", week.WeekOfYear );
我假设因为 1/1/2012 是星期日,GetWeekOfYear
说它返回包含日期的一周,它返回的是 2011 年的最后一周而不是 2012 年的第一周。
请查看日历规则进行澄清。
1/1/2012 那天是星期天。我相信这就是为什么你会得到52,因为这是去年一周的最后一天。对于1月2日,您应该获得正确的结果。