获取不同开始日期的周数

本文关键字:周数 日期 开始 获取 | 更新日期: 2023-09-27 18:00:20

如果我使用这样的正常方式,我可以获得周数。正如你所知,这是根据2015年1月1日的正常开始日期计算周数的。

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

但我想更改开始日期。例如,我一年的第一周将是2015年7月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);

也许你可以计算开始日期的周数(例如2015年7月1日-27),然后计算实际日期的周号,例如2015年12月12日(50,然后减去-在这种情况下23

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

那样:

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)