Любой знает простой способ получить дату первого дня недели (понедельник здесь, в Европе). Я знаю год и номер недели? Я собираюсь сделать это в C #.
c#
.net
week-number
Бобби
источник
источник
Ответы:
У меня были проблемы с решением @HenkHolterman даже с исправлением @RobinAndersson.
Чтение по стандарту ISO 8601 хорошо решает проблему. Используйте первый четверг в качестве цели, а не понедельник. Код ниже будет работать и для 53 недели 2009 года.
источник
Мне нравится решение, предоставленное Хенком Холтерманом. Но чтобы быть немного более независимым от культуры, вы должны получить первый день недели для текущей культуры (это не всегда понедельник):
источник
firstMonday
плохое имя переменной для чего-то, что не может быть понедельником. =)ОБНОВЛЕНИЕ : .NET Core 3.0 и .NET Standard 2.1 поставляются с этим типом.
Хорошие новости! Добавление запроса на добавление
System.Globalization.ISOWeek
в .NET Core было только что объединено и в настоящее время запланировано на выпуск 3.0. Надеемся, что он распространится на другие платформы .NET в недалеком будущем.Вы должны быть в состоянии использовать
ISOWeek.ToDateTime(int year, int week, DayOfWeek dayOfWeek)
метод для расчета этого.Вы можете найти исходный код здесь .
источник
Самый простой способ - это найти первый понедельник года, а затем добавить соответствующее количество недель. Вот пример кода. Предполагается, что номер недели начинается с 1, кстати:
источник
Лично я бы использовал информацию о культуре, чтобы узнать день недели и перейти к первому дню культуры. Я не уверен, правильно ли я объясняю это, вот пример:
источник
используя Fluent DateTime http://fluentdatetime.codeplex.com/
источник
Согласно ISO 8601: 1988, который используется в Швеции, первая неделя года - это первая неделя, на которую в новом году уходит как минимум четыре дня.
Так что, если ваша неделя начинается в понедельник, первый четверг, то любой год находится в пределах первой недели. Вы можете DateAdd или DateDiff из этого.
источник
Предполагая, что номер недели начинается с 1
Это должно дать вам первый день в любой данной неделе. Я не проводил много испытаний, но похоже, что это работает. Это меньшее решение, чем большинство других я нашел в Интернете, поэтому хотел поделиться.
источник
new DateTime(1,1,YearNumber)
Бесплатно Период времени библиотека .NET включает в себя ISO 8601 соответствует классу Неделя :
источник
Это сработало для меня, у него также есть преимущество в том, что в качестве параметра для проверки формулы с различными культурами нужно использовать параметр Cultureinfo. Если он пуст, он получает информацию о текущей культуре ... допустимые значения такие: "it", "en-us", "fr", ... ando и так далее. Хитрость заключается в том, чтобы вычесть номер недели первого дня года, который может быть 1, чтобы указать, что первый день находится в пределах первой недели. Надеюсь это поможет.
источник
Вот метод, который совместим с номерами недель, которые использует Google Analytics, а также с той же схемой нумерации, которую мы использовали внутри Intel, и которая, я уверен, также используется во многих других контекстах.
источник
Я попробовал некоторые коды выше, и некоторые из них имеют небольшие ошибки, когда вы пробуете разные годы с разными начальными днями недели, вы увидите их, я взял код Jon Skeet, исправил его, и он работает, очень простой код.
источник
Слегка изменил код Микаэля Свенсона. Я нашел неделю первого понедельника и изменил номер недели.
источник
Неделя 1 определяется как неделя, которая начинается в понедельник и содержит первый четверг года.
источник
Чтобы конвертировать в обоих направлениях, смотрите здесь: статья в Википедии о датах недели ISO
источник
Я немного улучшил решение Томаса с помощью переопределения:
В противном случае дате предшествовала одна неделя.
Спасибо Томас, отличная помощь.
источник
Я использовал одно из решений, но оно дало мне неправильные результаты, просто потому, что оно считает воскресенье первым днем недели.
Я изменился:
чтобы:
и теперь это работает как шарм.
источник
Предлагаемое решение не является полным - оно работает только для CalendarWeekRule.FirstFullWeek. Другие типы правил недели не работают. Это можно увидеть с помощью этого теста:
источник
Я сделал улучшенную версию предложенного решения, которая является более простой и параметризует firstDayOfWeek:
источник
Это мое решение, когда мы хотим вычислить дату, данный год, номер недели и день недели.
источник
Я упростил код, предоставленный Микаэлем Свенссоном, который подходит для многих стран Европы.
источник
Я написал и протестировал следующий код, и он прекрасно работает для меня. Пожалуйста, дайте мне знать, если у кого-то возникнут проблемы с этим, я также разместил вопрос, чтобы получить наилучший ответ. Кто-то может найти это полезным.
источник
GetFirstDateOfWeekByWeekNumber(2020, 29)
на 29 неделе 2020 года это возвращается07/20/2020
. Но первый день 29-й недели был07/13/2020
В настоящее время не существует класса C #, который бы правильно обрабатывал номера ISO 8601week. Даже если вы можете создать культуру, найти ближайшую вещь и исправить ее, я думаю, что лучше сделать полный расчет самостоятельно:
источник