Мне было интересно, если вы, ребята, знаете, как получить дату течения в понедельник в понедельник на основе сегодняшней даты?Получить дату первого понедельника недели?
т.е. 2009-11-03 прошел в и 2009-11-02 получает вернулся
/M
Мне было интересно, если вы, ребята, знаете, как получить дату течения в понедельник в понедельник на основе сегодняшней даты?Получить дату первого понедельника недели?
т.е. 2009-11-03 прошел в и 2009-11-02 получает вернулся
/M
Это то, что я использую (вероятно, не интернационализированы):
DateTime input = //...
int delta = DayOfWeek.Monday - input.DayOfWeek;
DateTime monday = input.AddDays(delta);
Да, действительно: Не интернационализирован. Понедельник - это не всегда первый день недели. –
Вы можете получить первый день недели, используя: CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek –
Фактически первый день недели в соответствии с культурой не представляет интереса к этому случаю; OP хочет понедельника недели, а не в первый день недели. –
Что-то, как это будет работать
DateTime dt = DateTime.Now;
while(dt.DayOfWeek != DayOfWeek.Monday) dt = dt.AddDays(-1);
Я уверен, что есть лучше способ Тхо :)
Попробуйте это:
public DateTime FirstDayOfWeek(DateTime date)
{
var candidateDate=date;
while(candidateDate.DayOfWeek!=DayOfWeek.Monday) {
candidateDate=candidateDate.AddDays(-1);
}
return candidateDate;
}
EDIT для полноты: перегрузки для сегодняшнего дня:
public DateTime FirstDayOfCurrentWeek()
{
return FirstDayOfWeek(DateTime.Today);
}
Почему цикл? Есть способы сделать это без цикла. См. Ответы ниже. –
Ответ Pondium может искать вперед в некоторых случаях. Если вы хотите только поиск в обратном направлении, я думаю, что это должно быть:
DateTime input = //...
int delta = DayOfWeek.Monday - input.DayOfWeek;
if(delta > 0)
delta -= 7;
DateTime monday = input.AddDays(delta);
Это должен быть правильный ответ, поскольку он обрабатывает воскресенье, т.е. FirstDayOfWeek - понедельник, поэтому, если воскресенье - это дата ввода, она должна верните в понедельник раньше. –
+1 Если «вход» - 1/1/2017 (воскресенье), этот код дает 26/12/2016 в качестве первого дня недели! Не 2/1/2017 (что дает принятый ответ!) –
Он также работает 01/01/2019 = 31/12/2018! –
var now = System.DateTime.Now;
var result = now.AddDays(-((now.DayOfWeek - System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.FirstDayOfWeek + 7) % 7)).Date;
Возможно возвратит вас с понедельника. Если вы не используете культуру, где понедельник не первый день недели.
насчет:
CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek
Почему бы не использовать родное решение?
Вопрос заключается в том, чтобы получить конкретную дату (то есть 2015-11-20), а не тот день, который определен как первый день. –
public static class DateTimeExtension
{
public static DateTime GetFirstDayOfWeek(this DateTime date)
{
var firstDayOfWeek = CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek;
while (date.DayOfWeek != firstDayOfWeek)
{
date = date.AddDays(-1);
}
return date;
}
}
Международный. Я думаю, что расширение может быть более полезным.
Посмотрите на этот вопрос: http://stackoverflow.com/questions/38039/how-can-i-get-the-datetime-for-the-start-of-the-week –