【问题标题】:Get week number for the given date c#获取给定日期的周数c#
【发布时间】: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


【解决方案1】:

如果您正在寻找 ISO-8601 每周一周,您可以使用我的 Noda Time 项目:

var date = new LocalDate(2014, 12, 30);
var week = date.WeekOfWeekYear; // 1
var weekYear = date.WeekYear; // 2015

可以通过DateTime 通过LocalDateTime 获得LocalDate,但理想情况下,您会在您的项目中尽可能广泛地使用Noda Time 时间。 (无论如何,这就是我希望你能获得最大利益的方式。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    相关资源
    最近更新 更多