2012-01-04 24 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

相關問題