【发布时间】:2010-12-12 13:22:31
【问题描述】:
我想知道你们是否知道如何根据今天的日期获取当前星期的星期一的日期?
即 2009-11-03 传入,2009-11-02 返回
/M
【问题讨论】:
我想知道你们是否知道如何根据今天的日期获取当前星期的星期一的日期?
即 2009-11-03 传入,2009-11-02 返回
/M
【问题讨论】:
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;
可能会在星期一返回您。除非您使用的文化中星期一不是一周的第一天。
【讨论】:
Pondium 答案在某些情况下可以向前搜索。如果您只想向后搜索,我认为应该是:
DateTime input = //...
int delta = DayOfWeek.Monday - input.DayOfWeek;
if(delta > 0)
delta -= 7;
DateTime monday = input.AddDays(delta);
【讨论】:
试试这个:
public DateTime FirstDayOfWeek(DateTime date)
{
var candidateDate=date;
while(candidateDate.DayOfWeek!=DayOfWeek.Monday) {
candidateDate=candidateDate.AddDays(-1);
}
return candidateDate;
}
编辑以确保完整性:今天的日期超载:
public DateTime FirstDayOfCurrentWeek()
{
return FirstDayOfWeek(DateTime.Today);
}
【讨论】:
这是我使用的(可能没有国际化):
DateTime input = //...
int delta = DayOfWeek.Monday - input.DayOfWeek;
DateTime monday = input.AddDays(delta);
【讨论】:
DayOfWeek.Monday 是 1,input.DayOfWeek 是 0 代表星期日。)
en-GB 文化中一样,它是星期一。)
这样的事情会起作用
DateTime dt = DateTime.Now;
while(dt.DayOfWeek != DayOfWeek.Monday) dt = dt.AddDays(-1);
我相信还有更好的方法 :)
【讨论】: