获取不同开始日期

时间:2015-06-29 22:11:15

标签: c# datetime week-number

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

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

但我想改变开始日期。例如,我的第一周将是2015年7月1日,根据该日期,我想计算给定日期的一年中的一周。

4 个答案:

答案 0 :(得分:2)

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);

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

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

答案 3 :(得分:-1)

那样:

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)