首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.Globalization.Calendar.GetWeekOfYear()返回奇数结果

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

Stack Overflow用户
提问于 2012-01-10 18:56:59
回答 4查看 10.3K关注 0票数 18

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

代码语言:javascript
复制
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);
}

结果

代码语言:javascript
复制
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周,但第一周应该包括这几天。有没有办法改变Calendar的这种行为?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-10 19:22:24

CalendarWeekRule枚举的文档明确指出,它“不直接映射到ISO8601”,并链接到采用Microsoft .Net的ISO 8601周年度格式,这是一个描述差异的博客条目。

票数 16
EN

Stack Overflow用户

发布于 2012-01-10 19:12:33

看看CalendarWeekRule的值。您正在使用FirstFourDayWeek,因此您将得到所描述的值。如果你想每周都有7天,你应该使用FirstFullWeek

就你而言,这意味着31。12. 2007年将是第53周,但2008年2月1日也是如此。

票数 2
EN

Stack Overflow用户

发布于 2020-02-06 15:17:56

从.net核心3开始,有一个新的ISOWeek,它确实正确地计算了WeekOfYear

https://learn.microsoft.com/en-us/dotnet/api/system.globalization.isoweek.getweekofyear

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8808878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档