我找了一个类似的帖子,但似乎没有人回答这个问题。
根据timeanddate.com网站的说法,对于01/01/2005和12/28/2008号,周数应该是1,前提是它是正确的:
01/01/2005和2008年2月12日
问题是,我拥有的C#代码为01/01/2005生成了正确的周数结果,但在12/28/2008中产生了一个错误的结果,返回53,而不是1:
CultureInfo clUS = new CultureInfo( "en-US", false );
int wkNm = clUS.Calendar.GetWeekOfYear(
new DateTime( 2005, 1, 1, clUS.Calendar ),
clUS.DateTimeFormat.CalendarWeekRule,
clUS.DateTimeFormat.FirstDayOfWeek
); // returns 1
wkNm = clUS.Calendar.GetWeekOfYear(
new DateTime( 2008, 12, 28, clUS.Calendar ),
clUS.DateTimeFormat.CalendarWeekRule,
clUS.DateTimeFormat.FirstDayOfWeek
); // returns 53对于CalendarWeekRule和FirstDayOfWeek,我使用了en-US文化的默认选项。
发布于 2013-01-21 10:16:38
有关此问题的说明可从这里获得。
我在CalendarWeekRule.FirstFourDayWeek规则中使用了下面的方法-它检查周四的周号是什么(使用相同的.NET方法),因为星期四是使用该规则时真正重要的一天,而微软的代码一直都是正确的:)
private static int WeekNumber(DateTime date)
{
var dayOffset = DayOfWeek.Thursday - date.DayOfWeek;
if (dayOffset > 0)
date = date.AddDays(dayOffset);
return CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(date, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
}https://stackoverflow.com/questions/14242940
复制相似问题