Получить дату первого понедельника недели? [дубликат]
этот вопрос уже есть ответ здесь:
Как я могу получить дату и время для начала недели?
26 ответов
Мне было интересно, Знаете ли вы, ребята, как получить дату понедельника текущей недели на основе сегодняшней даты?
т. е. 2009-11-03 прошло и 2009-11-02 возвращается обратно
/M
7 ответов:
Это то, что я использую (вероятно, не интернационализирована):
DateTime input = //... int delta = DayOfWeek.Monday - input.DayOfWeek; DateTime monday = input.AddDays(delta);
ответ Pondium может искать вперед в некоторых случаях. Если вы хотите только обратный поиск я думаю, что это должно быть:
DateTime input = //... int delta = DayOfWeek.Monday - input.DayOfWeek; if(delta > 0) delta -= 7; DateTime monday = input.AddDays(delta);
что-то вроде этого будет работать
DateTime dt = DateTime.Now; while(dt.DayOfWeek != DayOfWeek.Monday) dt = dt.AddDays(-1);Я уверен, что есть более хороший способ tho :)
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; } }здесь Международный. Я думаю, что в качестве расширения это может быть более полезным.
о:
CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeekпочему не использовать собственное решение?
var now = System.DateTime.Now; var result = now.AddDays(-((now.DayOfWeek - System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.FirstDayOfWeek + 7) % 7)).Date;вероятно, вернет вас с понедельника. Если вы не используете культуру, где понедельник не является первым днем недели.
попробуйте это:
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); }
Comments