#c# #.net #datetime #week-number
#c# #.net #дата-время #номер недели
Вопрос:
Я использую следующее, чтобы получить номер текущей недели:
var weekNo = CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(DateTime.UtcNow,
CalendarWeekRule.FirstFullWeek,
DayOfWeek.Sunday);
И я хочу вернуть DateTime
, представляющее первый день n-й недели после сегодняшнего.
например, когда n = 2, я бы хотел, чтобы DateTime
представляло воскресенье после следующего.
Есть ли способ, которым я могу сделать это на C #?
Ответ №1:
Вы могли бы использовать:
DateTime sundayInFuture = DateTime.Today.AddDays((n - 1) * 7 (7 - (int)DateTime.Today.DayOfWeek));
Это должно сработать (хотя у меня нет доступа ни к чему, чтобы это протестировать!).
Редактировать: Спасибо за комментарии.
Комментарии:
1. @anishMarokey — если вы оставляете подобный комментарий, по крайней мере, объясните, почему или какую ошибку вы получаете.
2. @anishMarokey: Почему бы и нет? Что я пропустил?
3. Мне пришлось использовать DateTime. Сегодня. День недели в int, но в остальном это работает. — Спасибо.
4. @Andy: Без проблем. Я обновлю свой ответ окончательным решением
Ответ №2:
Это должно сработать:
int n = 2;
DateTime today = DateTime.Today;
int daysToNextSunday = (7 - today.DayOfWeek - DayOfWeek.Sunday) ;
DateTime nthSunday = today.AddDays((n - 1) * 7 daysToNextSunday);
Комментарии:
1. День недели. Воскресенье = 0, так что вы можете немного упростить ситуацию, проигнорировав это.
2. @Jackson: Да — Я не хотел делать это предположение, хотя мне легче анализировать, если оно есть там явно
3. Достаточно справедливо — это также упрощает преобразование в другой день недели.
4. Нет, это не облегчает преобразование. Этот код работает, потому что sunday == 0, с другим днем daysToNext может стать отрицательным, что фактически сделает его daysToPrevious…
Ответ №3:
Не могли бы вы добавить количество дней с этого момента до воскресенья, а затем добавить (n-1) * еще 7 дней?
Ответ №4:
Пожалуйста, обратите внимание, что Календарь.GetWeekOfYear не соответствует стандарту ISO 8601.
Вот пример использования класса Week из библиотеки временных периодов для .NET:
// ----------------------------------------------------------------------
public DateTime GetStartOfWeek( DateTime moment, int offset )
{
return new Week( new Week( moment ).WeekOfYear Math.Abs( offset ) ).FirstDayOfWeek;
} // GetStartOfWeek