Мне было интересно, если вы, ребята, знаете, как получить дату течений неделю в понедельник на основе сегодняшней даты?
i.e 2009-11-03 прошел в и 2009-11-02 возвращается
/М
Мне было интересно, если вы, ребята, знаете, как получить дату течений неделю в понедельник на основе сегодняшней даты?
i.e 2009-11-03 прошел в и 2009-11-02 возвращается
/М
Это то, что я использую (возможно, не интернационализированный):
DateTime input = //...
int delta = DayOfWeek.Monday - input.DayOfWeek;
DateTime monday = input.AddDays(delta);
В любом случае ответ Pondium может искать Forward. Если вы хотите только обратный поиск, я думаю, что это должно быть:
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);
Я уверен, что есть более хороший способ:
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);
}