2012-01-04 25 views
0

任何人都知道如何构建DataTable的一周?如何以编程方式在C#中构建ISO Week Number DataTable?

我听说有很多类型的计算,格里高利或其他... 我的需求是ISO周没有和绑定到数据表取决于第一周。

DataTable中有2列:ISOWeekNo和WeekName

在C#
ISOWeekNo WeekName 
1   01 Jan 2012 To 07 Jan 2012 
2   08 Jan 2012 To 14 Jan 2012 

如何建立编程基于ISO周没有?

+0

编译器说? – Burimi 2012-01-04 09:26:40

+1

问题是第一个ISO 8601星期的确从02.01.2012开始,而不是01.01.2012开始。 http://en.wikipedia.org/wiki/ISO_8601 – dknaack 2012-01-04 09:55:09

回答

2
// Set up DataTable 
var dt = new DataTable(); 
var col1 = new DataColumn("ISOWeekNo", typeof(int)); 
var col2 = new DataColumn("WeekName", typeof(string)); 
dt.Columns.AddRange(new[] { col1, col2 }); 
dt.PrimaryKey = new[] { col1 }; 

// Start with the first day of this year and check each day until next year. 
var day = new DateTime(DateTime.Now.Year, 1, 1); 
while (day.Year == DateTime.Now.Year) 
{ 
    var weekNum = DateTimeFormatInfo.InvariantInfo.Calendar.GetWeekOfYear(day, CalendarWeekRule.FirstFullWeek, DayOfWeek.Monday); 
    if (!dt.Rows.Contains(weekNum)) 
     dt.Rows.Add(weekNum, string.Format("{0} to {1}", day.ToString("dd' 'MMM' 'yyyy"), day.AddDays(6).ToString("dd' 'MMM' 'yyyy"))); 
    day = day.AddDays(1); 
} 
+0

感谢您的代码......但2012年1月1日至2012年1月7日的周五52以及2012年12月23日至2012年12月31日之间的日期不包括在内。 – CMMaung 2012-01-04 10:52:50

+0

您要求输入ISO周数。 2012/01/01在2011年第52周。2012年第1周从2012/01/02开始。您可以将'CalendarWeekRule.FirstFullWeek'更改为'CalendarWeekRule.FirstDay',但它不会是ISO。 – snurre 2012-01-04 11:25:55

+0

兄弟我的意思是在十二月你可以检查点。失去了一个星期。感谢您的支持 – CMMaung 2012-01-04 12:04:30

相关问题