Получить неделю из выбранного месяца календаря-даты

Мне нужно решение для расчета недели с выбранной даты. (в месячном календаре)
Я пробовал:

DateTime dt1 = new DateTime(monthCalendar1.SelectionStart.Year, 
                            monthCalendar1.SelectionStart.Month, 
                            monthCalendar1.SelectionStart.Day);

DateTime dt2 = new DateTime(monthCalendar1.SelectionStart.Year, 
                            1, 
                            1);

System.TimeSpan varTime = dt1 - dt2;
int weeks = (varTime.Days / 7) + 1;

Но начало и конец недели неверны, и в некоторые годы у меня было 53 недели?
Как лучше всего решить эту проблему?


person MrMAG    schedule 02.08.2012    source источник
comment
В некоторых годах 53 недели, это не ошибка, а намеренная   -  person Henrik Stenbæk    schedule 02.08.2012


Ответы (2)


public int WeekNumber(DateTime date)
{
    CultureInfo ciCurr = CultureInfo.CurrentCulture;
    int weekNum = ciCurr.Calendar.GetWeekOfYear(date,
                                          CalendarWeekRule.FirstFourDayWeek,
                                          DayOfWeek.Monday);
    return weekNum;
}

Не забудьте исправить CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday в соответствии с вашей текущей культурой, здесь используется датский/датский язык.

person Henrik Stenbæk    schedule 02.08.2012

Попробуйте функцию календаря GetWeekOfYear. посмотрите здесь и прокрутите вниз, чтобы увидеть полный пример: http://msdn.microsoft.com/en-us/library/system.globalization.calendar.getweekofyear.aspx

person Occidio    schedule 02.08.2012
comment
Кто-нибудь опубликовал решение и снова удалил его. Во всяком случае, я мог бы схватить отрезанное. Спасибо, неизвестно :) - person MrMAG; 02.08.2012
comment
@ user1559441: Я снова восстановил свой ответ - только что понял, что на самом деле я не ответил на все ваши вопросы :-) - person Henrik Stenbæk; 02.08.2012