我想列出接下来的10周
结果应该是这样的:
Week Year
----------------
45: 2012
46: 2012
47: 2012
48: 2012
49: 2012
50: 2012
51: 2012
52: 2012
1: 2013
2: 2013
有些年份有53周,而今年12月31日是星期一,本周是1周还是53周?
无论如何,我想跳过第53周,每当它出现时。这意味着1或2天不会成为列表中任何一周的一部分,但这并不重要。
答案 0 :(得分:2)
有些年份有一个星期53,而今年12月31日是星期一,是本周1或53周?
假设您的意思是“一周中的一周”,那将是2013年的第一周。
在ISO日历中,一周中的第一周是第一周一至周日,其中有4天或更长时间。
目前尚不清楚为什么你想跳过第53周 - 它不会跳过1或2天,它会跳过整整一周。
当然,这实际上假设您的意思是“年度周”的ISO定义。如果你不这样做,那就不一样了。在进行任何其他操作之前,您需要澄清您的要求。
要从.NET获取周周,您可以使用Calendar.GetWeekOfYear
- 用于您使用CalendarWeekRule.FirstFourDayWeek
和DayOfWeek.Monday
的ISO定义。我不知道是否有什么可以获得周年本身。
作为一个明显的插件,我的Noda Time在日期上支持WeekYear
和WeekOfWeekYear
,您可以构建给定周 - 年/周 - 的日期周/周组合。
答案 1 :(得分:1)
我刚刚写了一个小型控制台应用程序就是这样做的:
static void Main(string[] args)
{
System.Globalization.CultureInfo ci = System.Threading.Thread.CurrentThread.CurrentCulture;
DateTime dt = DateTime.Now; //Use current date as starting point
for (int i = 0; i < 10; i++)
{
int weekNo = ci.Calendar.GetWeekOfYear(
dt,
ci.DateTimeFormat.CalendarWeekRule,
ci.DateTimeFormat.FirstDayOfWeek
);
int year = ci.Calendar.GetYear(dt);
if (weekNo == 53) //if week number==53, then go to next week
{
dt = dt.AddDays(7);
weekNo = ci.Calendar.GetWeekOfYear(
dt,
ci.DateTimeFormat.CalendarWeekRule,
ci.DateTimeFormat.FirstDayOfWeek
);
year = ci.Calendar.GetYear(dt);
}
dt = dt.AddDays(7);
Console.WriteLine(weekNo + "-" + year);
}
}
今天输出:
46-2012
47-2012
48-2012
49-2012
50-2012
51-2012
52-2012
1-2013
2-2013
3-2013
答案 2 :(得分:0)
来自msdn http://msdn.microsoft.com/en-us/library/system.globalization.calendar.getweekofyear.aspx
using System;
using System.Globalization;
public class Example
{
public static void Main()
{
DateTimeFormatInfo dfi = DateTimeFormatInfo.CurrentInfo;
DateTime date1 = new DateTime(2011, 1, 1);
Calendar cal = dfi.Calendar;
Console.WriteLine("{0:d}: Week {1} ({2})", date1,
cal.GetWeekOfYear(date1, dfi.CalendarWeekRule,
dfi.FirstDayOfWeek),
cal.ToString().Substring(cal.ToString().LastIndexOf(".") + 1));
}
}
// The example displays the following output: // 1/1/2011: Week 1 (GregorianCalendar)
答案 3 :(得分:-1)
以下内容将根据自年初以来的周数进行。
如果您希望这是基于整周,那么您需要根据一年中第一周的日期确定开始时的偏移量为0或1。
public class Week
{
public Week(int weekOfYear, int year)
{
WeekOfYear = weekOfYear;
Year = year;
}
public int WeekOfYear { get; private set; }
public int Year { get; private set; }
}
public IEnumerable<Week> Next10Weeks(DateTime startDate)
{
DateTime tempDate = startDate;
for (int i = 0; i < 10; i++)
{
//add one to first parameter if you want the 1-indexed week instead of 0 indexed
yield return new Week(tempDate.DayOfYear % 7, tempDate.Year);
tempDate.AddDays(7);
}
}