Справочник по C#

    Исходники по языку программирования CSharp

    Расчет номера недели для определенной даты: Справочник по C#

    /
    /
    /
    102 Views


    Функция вернет вам количество недель прошедших с начала года по день и месяц которые вы укажите при обращении к ней.

    Смотрите код ниже:

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

    Например, для первого сентября 2012 года код вернет вам цифру 35, означающую что в этот день, была 35 неделя года:

    private void button1_Click(object sender, EventArgs e)
    {
    DateTime date = new DateTime(2012,9,1);
    
    MessageBox.Show(GetWeekNumber(date).ToString());
    }
    


    Для работы нам понадобится подключить пространство имен:

    using System.Globalization;
    

          Благодаря внимательности наших читателей, была выявлена некоторая особенность данного кода, метод GetWeekOfYear не приведен к стандарту ISO 8601 — международному стандарту, выданный организацией ISO (International Organization for Standardization), который описывает формат даты и времени и даёт рекомендации для его использования в международном контексте. Так же согласно ISO 8601 четверг считается четвёртым днём недели, а также днём, который определяет нумерацию недель: первая неделя года определяется как неделя, содержащая первый четверг года, и так далее. Если вы хотите делать все по международным стандартам, предлагаем воспользоваться методом приведенным ниже, в котором внесены корректировки для расчета номера недели.

    public int WeekNumber(DateTime fromDate)
    {
    // Получаем 1 января указанного нами года
    DateTime startOfYear = fromDate.AddDays(-fromDate.Day + 1).AddMonths(-fromDate.Month + 1);
    // Получение 31 декабря указанного нами года
    DateTime endOfYear = startOfYear.AddYears(1).AddDays(-1);
    //Согласно ISO 8601 четверг считается
    //четвёртым днём недели, а также днём,
    //который определяет нумерацию недель:
    //первая неделя года определяется как неделя,
    //содержащая первый четверг года, и так далее.
    //Вносим соответствующие корректировки
    int[] iso8601Correction = { 6, 7, 8, 9, 10, 4, 5 };
    int nds = fromDate.Subtract(startOfYear).Days +
    iso8601Correction[(int)startOfYear.DayOfWeek];
    int wk = nds / 7;
    switch (wk)
    {
    case 0:
    // Возвращаем номер недели от 31 декабря предыдущего года
    return WeekNumber(startOfYear.AddDays(-1));
    case 53:
    // Если 31 декабря выпадает до четверга 1 недели следующего года
    if (endOfYear.DayOfWeek < DayOfWeek.Thursday)
    return 1;
    else
    return wk;
    default: return wk;
    }
    }
    

          К примеру в 2004 году 31 декабря выпало на пятницу, и если опираться на стандарт ISO 8601, то количество недель в этом году составило 53.

    Ссылки для скачивания примера: Rusfolder.netDepositFilesTurbobit.netLetitbit.net

    Расчет номера недели для определенной даты: Справочник по C#

    0.00 (0%) 0 votes

    moyadcode13
    • Facebook
    • Twitter
    • Google+
    • Linkedin
    • Pinterest
    moyadcode10
    moyadcode11
    moyadcode9