我想计算一年中一周的数量。 I see this post
在这篇文章中,使用此代码的是
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);
}
但是我看到了一个问题。如果一个月的最后一天是星期日,则重复一周的数量。
例如,2013年3月的最后一天是星期日。本周是第13位,是正确的。但是在4月份,C#如何使用一个月内总共6个星期来计算星期数,4月的第一周没有任何一天的四月,因为所有的日子都属于游行,因为一周的最后一天是3月30日。所以C#说四月的第一周是第15周,但这是不正确的,它必须是第14周。
所以我想知道是否有办法以正确的方式计算一周的数量。
编辑:
我的意思是:
三月,最后一周就是:
25 26 27 28 29 30 31
这是第13个,是正确的。
在四月,第一周是:
1 2 3 4 5 6 7
本周计算为第15位。
因此,如果我看到行军日历,则上周计算为第13日,如果我看到4月日历,则行军的最后一周计算为第14周。这是不正确的。
解决方案:
DateTime dtCalendar = Calendar.DisplayDate;
int gridRow = (int)GetValue(Grid.RowProperty);
// Return the week of our adjusted day
int wueekNumber= System.Globalization.CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(dtCalendar, System.Globalization.CalendarWeekRule.FirstDay, DayOfWeek.Monday);
if (dtCalendar.DayOfWeek == DayOfWeek.Monday)
{
gridRow = gridRow - 1;
}
Text = (weekNumbe r+ gridRow - 1).ToString();
感谢。
答案 0 :(得分:1)
问题是您使用的是错误的CalendarWeekRule
。要获得您想要的结果,您应该使用FirstDay
。我在互联网上看到过各种代码,说你应该使用FirstFourDayWeek
,但经过一些测试,我意识到“正确的”是FirstDay
。我已经用你的例子对它进行了测试,它提供了正确的结果:第14周。
int targetYear = 2013;
DateTime targetDate = new DateTime(targetYear, 4, 1);
int week = System.Globalization.CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(targetDate, System.Globalization.CalendarWeekRule.FirstDay, DayOfWeek.Monday);