Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取一周中第一个星期一的日期?_C#_.net - Fatal编程技术网

C# 获取一周中第一个星期一的日期?

C# 获取一周中第一个星期一的日期?,c#,.net,C#,.net,我想知道你们是否知道如何根据今天的日期来计算星期一的日期 i、 e 2009-11-03通过,2009-11-02返回 /像这样的东西会有用的 DateTime dt = DateTime.Now; while(dt.DayOfWeek != DayOfWeek.Monday) dt = dt.AddDays(-1); 我相信有一种更好的方法:)这是我使用的(可能不是国际化的): 试试这个: public DateTime FirstDayOfWeek(DateTime date) {

我想知道你们是否知道如何根据今天的日期来计算星期一的日期

i、 e 2009-11-03通过,2009-11-02返回


/像这样的东西会有用的

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;
}
编辑以确保完整性:今天的日期过载:

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);
可能会在星期一给你回信。除非您使用的是星期一不是一周的第一天的文化氛围。

那么:

CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek
为什么不使用本机解决方案

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获取一周的第一天。实际上,在这种情况下,根据区域性,一周的第一天不感兴趣;OP想要一周的星期一,而不是一周的第一天。如果是一个星期天,它会在第二天返回,而不是6天前。(
DayOfWeek.Monday
1
input.DayOfWeek
0
的一个周日。)道歉,不要把它当回事,我只是想为那些通过谷歌搜索“每周第一天”并获得此信息的人表达不同意见。(有趣的是,你把星期天作为英国的fdow,就像在
en-GB
文化中一样,今天是星期一。)为什么要循环???,有很多方法不用循环就可以做到。请参阅下面的答案。这应该是正确的答案,因为它处理星期日,即星期一的第一天是星期一,因此如果星期日是输入日期,它应该返回之前的星期一。接受的答案不是。+1如果“输入”是2017年1月1日(星期日),则该代码将2016年12月26日作为一周的第一天!不是2017年2月1日(公认的答案是!)它也适用于2019年1月1日=2018年12月31日!var monday=DateTime.Now.AddDays(DayOfWeek.monday-DateTime.Now.DayOfWeek>0?(DayOfWeek.monday-DateTime.Now.DayOfWeek)-7:DayOfWeek.monday-DateTime.Now.DayOfWeek)日期;这是为我工作。也在周日或周一。这只是工作!感谢问题是获取具体日期(即2015-11-20),而不是将哪一天定义为第一天。
CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek
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;
    }
}