获取给定日期的正确周数。我在谷歌上搜索了很多,找到了很多解决方案,但是没有一个给我正确的2012-12-31周数。甚至MSDN上的示例(链接)失败。2012-12-31是星期一,所以应该是第一周,但是我尝试的每一种方法都给了我53。以下是我尝试过的一些方法:来自MDSN库:DateTimeFormatInfo dfi = DateTimeFormatInfo.CurrentInfo;Calendar cal = dfi.Calendar;return cal.GetWeekOfYear(date, dfi.CalendarWeekRule, dfi.FirstDayOfWeek);解决方案2:return new GregorianCalendar(GregorianCalendarTypes.Localized).GetWeekOfYear(date, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);解决方案3:CultureInfo ciCurr = CultureInfo.CurrentCulture;int weekNum = ciCurr.Calendar.GetWeekOfYear(dtPassed, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);return weekNum;更新当日期为2012-12-31时,下面的方法实际上返回1。换句话说,我的问题是我的方法没有遵循ISO-8601标准。// This presumes that weeks start with Monday.// Week 1 is the 1st week of the year with a Thursday in it.public static int GetIso8601WeekOfYear(DateTime time){
// Seriously cheat. If its Monday, Tuesday or Wednesday, then it'll
// be the same week# as whatever Thursday, Friday or Saturday are,
// and we always get those right
DayOfWeek day = CultureInfo.InvariantCulture.Calendar.GetDayOfWeek(time);
if (day >= DayOfWeek.Monday && day <= DayOfWeek.Wednesday)
{
time = time.AddDays(3);
}
// Return the week of our adjusted day
return CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(time, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);}
3 回答
喵喔喔
TA贡献1735条经验 获得超5个赞
52周*7天=364天。
美国(星期日->星期六):2012年-12-30和2012-12-31,每周52周+一周短2天.这总共需要53周的时间。今年的最后两天(星期日+星期一)组成了他们自己的短短的一周。
欧洲(星期一->星期日):1月2日(2012-1-2年)是第一个星期一,所以这是第一周的第一天。问问1月1日的周数,你就会得到52周,因为它被认为是2011年最后一周的一部分。
var d = new DateTime(2012, 12, 31);CultureInfo cul = CultureInfo.CurrentCulture;var firstDayWeek = cul.Calendar.GetWeekOfYear( d, CalendarWeekRule.FirstDay, DayOfWeek.Monday);int weekNum = cul.Calendar.GetWeekOfYear( d, CalendarWeekRule.FirstDay, DayOfWeek.Monday);int year = weekNum == 52 && d.Month == 1 ? d.Year - 1 : d.Year;Console.WriteLine("Year: {0} Week: {1}", year, weekNum);
CultureInfo cul = CultureInfo.GetCultureInfo("de-DE");
- 3 回答
- 0 关注
- 346 浏览
添加回答
举报
0/150
提交
取消