【发布时间】:2014-12-30 17:47:46
【问题描述】:
我已尝试寻找一种解决方案,该解决方案可以为日期值提供正确的周数。
link1, link2,link3
遵循上述链接中的方法,但对于日期 30/12/2014,我得到的周数为 53。但它属于 2015 年的第一周。
我尝试了以下方法来获取特定日期的一年中的周数。
private int GetWeekNumberOfTheYear() {
var currentCulture = CultureInfo.CurrentCulture;
// option 1
var weekNo = currentCulture.Calendar.GetWeekOfYear(DateTime.Now,currentCulture.DateTimeFormat.CalendarWeekRule, currentCulture.DateTimeFormat.FirstDayOfWeek);
// option 2
var weekNo = CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(DateTime.Now, CalendarWeekRule.FirstDay, DayOfWeek.Monday);
return weekNo; }
上面的方法返回 53 作为周数是正确的还是应该是 1 ?
上面的代码有没有错误。请提出建议。
编辑:
找到许多指定的搜索,2014 年 12 月 29 日至 2015 年 1 月 4 日为 2015 年的第一周。
所以我的困惑是本周必须被视为第 53 周或第 1 周。
http://week-number.net/calendar-with-week-numbers-2014.html
http://www.epochconverter.com/date-and-time/weeknumbers-by-year.php
【问题讨论】:
-
为什么 12 月 30 日永远是一年中的第一周?
-
一年有 52.1775 周,换句话说,第 53 周中只有一天或两天。因此,返回 53 当然是正确的。想想……为什么 12 月的第 30 天(有 31 天)会在 2015 年的第一周。
-
@JeroenVannevel 我猜他的困惑来自 12 月 30 日和 1 月 1 日同一周。
-
那么您肯定想要 ISO-8601 的一周中的一周吗?如果是这样,Noda Time 是您前进的方向。不过,值得澄清这个问题。 “周数”是一个模棱两可的概念。
-
是的,这是 ISO-8601 周年。 (如epochconverter.com/epoch/weeknumbers.php 所记录的那样)- 这绝对是您想要的吗?
标签: c# asp.net date cultureinfo