获取一周的第一个星期一的日期?

时间:2009-11-03 07:48:58

标签: c# .net

我想知道你们是否知道如何根据今天的日期获得周流周日?

即2009-11-03通过,2009-11-02被退回

/ M

7 个答案:

答案 0 :(得分:129)

这是我使用的(可能不是国际化的):

DateTime input = //...
int delta = DayOfWeek.Monday - input.DayOfWeek;
DateTime monday = input.AddDays(delta);

答案 1 :(得分:58)

在某些情况下,Pondium的答案可以搜索Forward。如果你只想要向后搜索我认为它应该是:

DateTime input = //...
int delta = DayOfWeek.Monday - input.DayOfWeek;
if(delta > 0)
    delta -= 7;
DateTime monday = input.AddDays(delta);

答案 2 :(得分:6)

这样的事情会起作用

DateTime dt = DateTime.Now;
while(dt.DayOfWeek != DayOfWeek.Monday) dt = dt.AddDays(-1); 

我确信有更好的方式:)

答案 3 :(得分:4)

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;
    }
}

国际在这里。我认为作为扩展,它可能更有用。

答案 4 :(得分:3)

怎么样:

CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek

为什么不使用原生解决方案?

答案 5 :(得分:1)

var now = System.DateTime.Now;

var result = now.AddDays(-((now.DayOfWeek - System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.FirstDayOfWeek + 7) % 7)).Date;

可能会在星期一回来。除非你使用的是星期一不是一周的第一天的文化。

答案 6 :(得分:0)

试试这个:

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);
}