Получить номер недели от заданной даты, когда неделя начинается в воскресенье - PullRequest
0 голосов
/ 18 мая 2018

Как получить правильный номер недели в году от заданной даты, когда мой первый день недели - воскресенье.

Например:

6 May 2018 - 12 May 2018 это неделя 18

13 May 2018 - 19 May 2018 это неделя 19

Я пытаюсь использовать следующий метод расширения, но не могудостичь желаемого результата.Это дает неделю 19 и 20 , где я ожидаю неделю 18 и 19 соответственно.

public static int GetWeekOfYear(this DateTime date)
{
    return CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(
      date, 
      CalendarWeekRule.FirstFourDayWeek, 
      DayOfWeek.Sunday);
}

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

CalendarWeekRule Enumeration: определяет различные правила для определения первой недели года.

Ранее то, что вы использовали:

CalendarWeekRule.FirstFourDayWeek

, что необходимо былозаменено на:

CalendarWeekRule.FirstFullWeek

Поскольку:

enter image description here

Фрагмент кода:

public static void Main()
{
    var week_test = Convert.ToDateTime("05/06/2018");
    var week_test2 = Convert.ToDateTime("05/13/2018");
    List<DateTime> weekList = new List<DateTime>();
    weekList.Add(week_test);
    weekList.Add(week_test2);
    CultureInfo ciCurr = CultureInfo.CurrentCulture;
  foreach(var week in weekList)
  {
    int weekNum = ciCurr.Calendar.GetWeekOfYear(week, CalendarWeekRule.FirstFullWeek, DayOfWeek.Sunday);
    Console.WriteLine(weekNum);
  }
}

Вывод:

enter image description here

Демонстрация:

dotNetFiddle

0 голосов
/ 18 мая 2018

вам нужно изменить аргумент для метода

CultureInfo.InvariantCulture.Calendar.GetWeekOfYear()

CalendarWeekRule.FirstFourDayWeek -> CalendarWeekRule.FirstFullWeek

согласно документу для FirstFullWeek - указывает, что первыйнеделя года начинается с первого наступления назначенного первого дня недели в первый день года или после него.

вот так

public static int GetWeekOfYear(DateTime date)
{
    return CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(date, CalendarWeekRule.FirstFullWeek, DayOfWeek.Sunday);
}
...