Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
 При наличии номера недели получить дату начала и дату окончания этой недели  [new]
Margenal
Member

Откуда:
Сообщений: 5
Подскажите как можно решить следующую задачу.

У меня есть номер недели например :не деля 38.

Мне нужно получить дату начала и дату окончания данной недели при вводе номера недели в textbox1.
Если в textbox1 ввести номер недели года, то в lebal1 и label2 должны отобразиться даты начала и конца недели.

Пытаюсь применить следующий код
public static DateTime GetFirstDateOfWeek(DateTime dayInWeek, DayOfWeek firstDay)
{
    DateTime firstDayInWeek = dayInWeek.Date;
    while (firstDayInWeek.DayOfWeek != firstDay)
        firstDayInWeek = firstDayInWeek.AddDays(-1);
 
    return firstDayInWeek;
}
public static DateTime GetLastDateOfWeek(DateTime dayInWeek, DayOfWeek firstDay)
{
    DateTime lastDayInWeek = dayInWeek.Date;
    while (lastDayInWeek.DayOfWeek != firstDay)
        lastDayInWeek = lastDayInWeek.AddDays(1);
 
    return lastDayInWeek;
}
22 сен 17, 14:49    [20816131]     Ответить | Цитировать Сообщить модератору
 Re: При наличии номера недели получить дату начала и дату окончания этой недели  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 2272
тут еще надо определиться, какая неделя в году номер 0, та которая уже наступила или та, которая наступ (1 января)
22 сен 17, 15:06    [20816246]     Ответить | Цитировать Сообщить модератору
 Re: При наличии номера недели получить дату начала и дату окончания этой недели  [new]
hVostt
Member

Откуда:
Сообщений: 11399
Margenal,

/// <summary>
/// Converts a date to a week number.
/// ISO 8601 week 1 is the week that contains the first Thursday that year.
/// </summary>
public static int ToIso8601Weeknumber(this DateTime date)
{
    var thursday = date.AddDays(3 - date.DayOfWeek.DayOffset());
    return (thursday.DayOfYear - 1) / 7 + 1;
}

/// <summary>
/// Converts a week number to a date.
/// Note: Week 1 of a year may start in the previous year.
/// ISO 8601 week 1 is the week that contains the first Thursday that year, so
/// if December 28 is a Monday, December 31 is a Thursday,
/// and week 1 starts January 4.
/// If December 28 is a later day in the week, week 1 starts earlier.
/// If December 28 is a Sunday, it is in the same week as Thursday January 1.
/// </summary>
public static DateTime FromIso8601Weeknumber(int weekNumber, int? year = null, DayOfWeek day = DayOfWeek.Monday)
{
    var dec28 = new DateTime((year ?? DateTime.Today.Year) - 1, 12, 28);
    var monday = dec28.AddDays(7 * weekNumber - dec28.DayOfWeek.DayOffset());
    return monday.AddDays(day.DayOffset());
}

/// <summary>
/// Iso8601 weeks start on Monday. This returns 0 for Monday.
/// </summary>
private static int DayOffset(this DayOfWeek weekDay)
{
    return ((int)weekDay + 6) % 7;
}


Отседова
22 сен 17, 15:30    [20816417]     Ответить | Цитировать Сообщить модератору
 Re: При наличии номера недели получить дату начала и дату окончания этой недели  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 2272
System.Globalization.CultureInfo.CurrentCulture.Calendar.GetWeekOfYear()
22 сен 17, 15:37    [20816466]     Ответить | Цитировать Сообщить модератору
Все форумы / WinForms, .Net Framework Ответить