2013-11-14 2 views
0

Мне нужна правильная календарная неделя для моего приложения. Это моя попытка:Получить правильную неделю календаря (1 или 53 ???) CUI

DateTime d = new DateTime(2013,12,31); 
CultureInfo CUI = CultureInfo.CurrentCulture; 
Label1.Text = CUI.Calendar.GetWeekOfYear(d, CUI.DateTimeFormat.CalendarWeekRule, CUI.DateTimeFormat.FirstDayOfWeek).ToString(); 

И теперь я получаю 53, но это неправильно в этом году. Правильно это должна быть первая неделя Календаря.

И декабрь 2015 года 31-12-2013 гг. У нас есть в следующий раз 53 календарных недели.

+1

.NET Обработка недели нарушается. Вы должны проверить [Noda-Time] (http://nodatime.org/). –

+0

Возможный дубликат [Получить правильный номер недели заданной даты] (http://stackoverflow.com/questions/11154673/get-the-correct-week-number-of-a-given-date) –

+0

«Исправить» не применимо. Вы должны знать, какое правило следовать, что неудивительно, что зависит от (деловой) культуры. –

ответ

2

Вы можете использовать этот метод, который возвращает 1:

public static int GetIso8601WeekOfYear(DateTime time) 
{ 
    DayOfWeek day = CultureInfo.InvariantCulture.Calendar.GetDayOfWeek(time); 
    if (day >= DayOfWeek.Monday && day <= DayOfWeek.Wednesday) 
    { 
     time = time.AddDays(3); 
    } 

    return CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(time, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday); 
} 

[заимствован из Get the correct week number of a given date]