2012-01-04 8 views
0

주간 데이터 테이블을 만드는 방법을 아는 사람이 있습니까?ISO Week Number DataTable을 프로그래밍 방식으로 C#으로 작성하려면 어떻게해야합니까?

그레고리력이나 그레고리력에 대한 계산 유형이 많다고 들었습니다. 내 필요는 ISO 주 아니오이며 데이터 테이블에 바인딩은 주 번호에 달려 있습니다. 아니 ISO 주를 기반으로 ISOWeekNo 및 WeekName

ISOWeekNo WeekName 
1   01 Jan 2012 To 07 Jan 2012 
2   08 Jan 2012 To 14 Jan 2012 

는 어떻게 프로그래밍 방식으로 구축 할 C#에서 :

DataTable에 2 열이?

+0

컴파일러는 말합니까? – Burimi

+1

문제는 첫 번째 ISO 8601주는 01.01.2012가 아니라 02.01.2012에 시작된다는 것입니다. http://en.wikipedia.org/wiki/ISO_8601 – dknaack

답변

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

코드 주셔서 감사합니다 ... 주 번호 52는 2012 년 1 월 1 일부터 7 월 12 일까지이며 2012 년 12 월 23 일과 2012 년 12 월 31 일 사이의 날짜는 포함되어 있지 않습니다. – CMMaung

+0

ISO 주 번호를 요청했습니다. 2012/01/01은 2011 년 52 번째 주입니다. 2012/01/01은 2012/01/02에 시작됩니다. 'CalendarWeekRule.FirstFullWeek'을'CalendarWeekRule.FirstDay'로 변경할 수는 있지만 ISO가 아닙니다. – snurre

+0

동생 12 월에 의미를 확인할 수 있습니다. 1 주일을 잃었다. 친절하게 도와 주셔서 감사합니다. – CMMaung