Csharp/C#教程:System.Globalization.Calendar.GetWeekOfYear()返回奇数结果分享


System.Globalization.Calendar.GetWeekOfYear()返回奇数结果

我正在计算日期的周数,但System.Globalization.Calendar在2007年和2012年12月31日(其他年份)中返回奇数结果。

 Calendar calendar = CultureInfo.InvariantCulture.Calendar; var date = new DateTime(2007, 12, 29); for (int i = 0; i < 5; i++) { int w = calendar.GetWeekOfYear(date, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday); Console.WriteLine("{0}t{1}", date.ToString("dd.MM.yyyy"), w); date = date.AddDays(1); } 

结果

 29.12.2007 52 30.12.2007 52 31.12.2007 53 <-- 01.01.2008 1 02.01.2008 1 29.12.2012 52 30.12.2012 52 31.12.2012 53 <-- 01.01.2013 1 02.01.2013 1 

据我了解,2007年和2012年不应该有53周,但是应该在第1周包含日期。有没有办法在Calendar更改此行为?

CalendarWeekRule枚举的文档明确指出它“不直接映射到ISO 8601”,并链接到Microsoft .Net中的ISO 8601 Week of Year格式 ,这是描述差异的博客条目。

看看CalendarWeekRule的值。 您正在使用FirstFourDayWeek ,因此您获得了所描述的值。 如果您希望每周都有7天,那么您应该使用FirstFullWeek

在你的情况下,这将意味着31. 12. 2007年将是第53周,但是将是2. 1. 2008。

星期标识符不必是52周独特的,您不一定在特定的一周内有7天。

如果这对您来说是个问题,那么添加代码来处理边缘情况。

上述就是C#学习教程:System.Globalization.Calendar.GetWeekOfYear()返回奇数结果分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1025690.html

(0)
上一篇 2022年1月8日
下一篇 2022年1月8日

精彩推荐