【问题标题】:Get week number for different startdate获取不同开始日期的周数
【发布时间】:2015-06-29 22:11:15
【问题描述】:

如果我使用这样的正常方式,我可以获得周数。如您所知,这个根据正常的开始日期(即 01.01.2015)计算周数。

CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(mydate, CultureInfo.CurrentCulture.DateTimeFormat.CalendarWeekRule, CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek)

但我想更改开始日期。例如,我一年中的第一周将是 01.07.2015,根据该日期,我想计算给定日期一年中的一周。

【问题讨论】:

  • 不妨看看野田时间nodatime.org。您应该知道,对于如何计算周数,有一个国际标准。如果您正在考虑制定自己的标准,那么您将给使用国际标准的任何人造成混淆。

标签: c# datetime week-number


【解决方案1】:

mydate 对象中减去新年和开始日期之间的差异

var startDate = new DateTime(2015, 7, 1);
var newYear = new DateTime(2015, 1, 1);

var culture = CultureInfo.CurrentCulture;
var weekOfYear = culture.Calendar.GetWeekOfYear(
    mydate.Add(newYear - startDate),
    culture.DateTimeFormat.CalendarWeekRule,
    culture.DateTimeFormat.FirstDayOfWeek);

【讨论】:

  • 如果您使用 startDate=Sunday 2015 Nov 1st & mydate=Wednesday 2015 Nov 4th 应用您的代码,mydate.Add(newYear - startDate) 会给出 2015 年 1 月 4 日星期日。然后 weekOfYear 将为 2,而预期为 1。
  • @Graffito 我得到“第一周”;这取决于您的 CalendarWeekRule 和 FirstDayOfWeek
  • Hazzik:给我你用于代码的规则(CalendarWeekRule 和 FirstDayOfWeek),我会发送返回结果不正确的日期。
【解决方案2】:

也许您可以计算开始日期的周数(例如 01.07.2015 - 27),然后计算实际日期的周数 - 例如 12.12.2015(50 ),然后只减去 - 在这种情况下 23?

【讨论】:

    【解决方案3】:

    只需减去您希望的第 1 周日期和默认开始日期之间的天数,并在每次计算时使用该偏移量 (.AddDays(offset))。

    【讨论】:

    • 不知道为什么这被否决了。它解释了一些有效但不显示代码的东西。 Hazziks 的回答是我的描述的实现......
    【解决方案4】:

    这样:

    DateTime startDateTime = new DateTime(2015,07,01) ;
    int fisrtDayOfWeek = 0 ; // 0:sunday for US, 1:Monday for many other coutries
    DateTime week1StartDateTime = startDateTime ; 
    for (int i=1;i<6;i++) if ((int)startDateTime.AddDays(i).Day==fisrtDayOfWeek )
      week1StartDateTime = startDateTime.AddDays(i) ;
    
    int weekNumber= mydate<week1StartDateTime ? 1 :
        ((int)(mydate-week1StartDateTime).TotalDays)/7+1 ;
    // note : casting double to int provides the floor (not round)
    

    【讨论】:

    • 意识到一周的第一天取决于国家,我相应地更新了我的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 2022-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多