我有一个
startdate 2010-01-01 (我假设它是一周的第一天)
和
enddate 2010-07-31 (我假设它是一周的第一天)
我希望从
的每周第一天的方法返回一个方法以上时间跨度。我不能假设一周的第一天总是星期一,因为我的用户
可能来自瑞典,美国或其他人。 algorythm应与ISO 8601兼容。
最终结果应该大致如下:
2010-01-01 , 1
2010-01-08 , 2
2010-01-15 , 3
2010-01-22 , 4
...
2010-07-31 , ~28
是的,我知道谷歌有很多关于该主题的链接,但没有人做得对。他们都
假设星期一是一周的第一天。也许SO上的一些c#神经过:P
编辑:
您对此代码说了什么:
public static int GetWeekNumber(DateTime dtPassed)
{
CultureInfo ciCurr = CultureInfo.CurrentCulture;
int weekNum = ciCurr.Calendar.GetWeekOfYear(dtPassed, CalendarWeekRule.FirstDay, DateTimeFormatInfo.CurrentInfo.FirstDayOfWeek);
return weekNum;
}
我在google上发现了一些并且稍微改了一下。
答案 0 :(得分:2)
你可能想看一下CultureInfo.CurrentCulture.Calendar.GetWeekOfYear
编辑:
对您自己的示例进行小修复,并将其作为扩展,以便更容易使用;)
public static int GetWeekNumber(this DateTime dtPassed)
{
CultureInfo ciCurr = CultureInfo.CurrentCulture;
DateTimeFormatInfo fiCurr = DateTimeFormatInfo.CurrentInfo;
int weekNum = ciCurr.Calendar.GetWeekOfYear(dtPassed, fiCurr.CalendarWeekRule, fiCurr.FirstDayOfWeek);
return weekNum;
}
这个DateTime的前面允许你使用它,好像它是一个DateTime对象的函数。
所以你可以做到
int week = DateTime.Now.GetWeekNumber();
答案 1 :(得分:1)
var week = new DateTime(2010, 1, 1).AddDays(7 * i);
Console.Out.WriteLine("week = {0}", week);
i
是您想要的周数。由于它是DateTime类型,您可以通过区域设置随意执行任何操作。处理闰年只需要一点点工作。您可以使用DateTime.IsLeapYear()
来检测它是否是闰年,如果日期超过2/29,则可以添加一天。
答案 2 :(得分:1)
public IList<int> GetWeekNumbers(DateTime startDate, DateTime endDate)
{
CultureInfo currentCulture = CultureInfo.CurrentCulture;
DateTimeFormatInfo dfi = DateTimeFormatInfo.CurrentInfo;
var result = new List<int>();
for (DateTime tm = startDate; tm <= endDate; tm = tm.AddDays(7))
{
result.Add(currentCulture.Calendar.GetWeekOfYear(tm, dfi.CalendarWeekRule,
dfi.FirstDayOfWeek));
}
return result;
}
答案 3 :(得分:1)
Calendar.GetWeekOfYear与ISO 8601不兼容(请参阅社区评论)。
免费Time Period Library for .NET包含周类,与ISO 8601兼容:
// ----------------------------------------------------------------------
public int GetWeekOfYear( DateTime moment )
{
return new Week( moment ).WeekOfYear;
} // GetWeekOfYear