我有以下代码来获取DateTime对象Time
中给出的年份的周数 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周。我似乎无法弄清楚为什么。任何人都知道为什么?
答案 0 :(得分:8)
该算法完全按照您的指示行事。你将CalanderWeekRule设置为FirstFourDayWeek。 2012年1月1日不是前四天的一部分,所以你已经指示压光器从1月2日开始计数。
答案 1 :(得分:4)
public static int WeeksInYear(DateTime date)
{
GregorianCalendar cal = new GregorianCalendar(GregorianCalendarTypes.Localized);
return cal.GetWeekOfYear(date, CalendarWeekRule.FirstDay, DayOfWeek.Monday);
我认为如果将 CalendarWeekRule.FirstFourDayWeek 更改为 CalendarWeekRule.FirstDay ,那么这将正常工作。
我改变它然后它的工作正常。
答案 2 :(得分:1)
正确计算了周数。你应该读一下如何实际计算/计算周数(维基百科?!)。
注意:周数计算的内置计算是错误的。 Microsoft在KnowledgeBase-Article 200299中描述了该问题。它与ISO-8601有问题。
答案 3 :(得分:1)
您可以使用支持ISO 8601周编号的Time Period Library for .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 );
答案 4 :(得分:0)
我认为因为2012年1月1日是星期日而GetWeekOfYear
表示它返回包含日期的一周,所以它将返回2011年的最后一周,而不是2012年的第一周。
请查看CalendarRule以获得澄清。
答案 5 :(得分:0)
2012年1月1日这是星期天。我相信这就是为什么你得到52,因为这是去年一周的最后一天。在1月2日你应该得到正确的结果。