Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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语言中获取下一天的日期#_C#_Date_Datetime - Fatal编程技术网

C# 如何在C语言中获取下一天的日期#

C# 如何在C语言中获取下一天的日期#,c#,date,datetime,C#,Date,Datetime,我怎样才能在C#中得到下周一或下周五的日期。 假设今天是星期三,我想知道下周五的日期。 这就是我所做的 DateTime time = DateTime.Now.Date; DateTime NextFriday; if (time.DayOfWeek == DayOfWeek.Wednesday) { NextFriday = DateTime.Now.AddDays(2); } 使用这种方法,我必须为每一天启动7个变量,为每一天启动7个条件,以找到下一个特定的日子 是否有更好、更清

我怎样才能在C#中得到下周一或下周五的日期。 假设今天是星期三,我想知道下周五的日期。 这就是我所做的

DateTime time = DateTime.Now.Date;
DateTime NextFriday;
if (time.DayOfWeek == DayOfWeek.Wednesday)
{
    NextFriday = DateTime.Now.AddDays(2);
}
使用这种方法,我必须为每一天启动7个变量,为每一天启动7个条件,以找到下一个特定的日子


是否有更好、更清晰的代码可以用来获取下一天的日期。

您可能应该使用支持此功能的时间库,例如NodaTime

DateTime today = DateTime.Today;
DateTime nextFriday = System.Linq.Enumerable.Range(0, 6)
  .Select(i => today.AddDays(i))
  .Single(day => day.DayOfWeek == DayOfWeek.Friday);
请参见下一个日期(IsoDayOfWeek.Sunday)on

这里有一个替代解决方案(请不要使用此选项):

使用以下命令

public int CalculateOffset(DayOfWeek current, DayOfWeek desired) {
    // f( c, d ) = [7 - (c - d)] mod 7
    // f( c, d ) = [7 - c + d] mod 7
    // c is current day of week and 0 <= c < 7
    // d is desired day of the week and 0 <= d < 7
    int c = (int)current;
    int d = (int)desired;
    int offset = (7 - c + d) % 7;
    return offset == 0 ? 7 : offset;
}

DayOfWeek只是一个介于0和6之间的枚举,因此,通过模运算,您可以使用感兴趣的日期和每周目标日期之间的差值来计算必须添加的天数

一个快速警告,当你问“今天”是什么意思时,你需要考虑到你感兴趣的时区。这意味着不同的事情,取决于你生活在日期线的哪一边

using System;

public class Program
{

    public static DateTime NextDayForDay(DayOfWeek dayOfWeek, DateTime occurringAfter)
    {
        return occurringAfter.AddDays(((dayOfWeek - occurringAfter.DayOfWeek + 6) % 7)+1); 
    }

    public static void Main()
    {
        for (int i=0; i < 7; i++)
        {
            for (int j=0; j < 7; j++)
            {
                DayOfWeek dayOfWeek = (DayOfWeek)(((int)DayOfWeek.Sunday + j) % 7);

                DateTime test = DateTime.Today.AddDays(i);
                Console.WriteLine($"{test}=>Next {dayOfWeek} is {NextDayForDay(dayOfWeek, test)}");
            }
        }   
    }
}
使用系统;
公共课程
{
公共静态日期时间NextDayForDay(DayOfWeek DayOfWeek,DateTime发生在之后)
{
返回发生在AddDays之后(((星期天-发生在星期天之后+6)%7)+1);
}
公共静态void Main()
{
对于(int i=0;i<7;i++)
{
对于(int j=0;j<7;j++)
{
DayOfWeek DayOfWeek=(DayOfWeek)((int)DayOfWeek.Sunday+j)%7);
DateTime测试=DateTime.Today.AddDays(i);
WriteLine($“{test}=>Next{dayOfWeek}是{NextDayForDay(dayOfWeek,test)}”);
}
}   
}
}
public int CalculateOffset(DayOfWeek current, DayOfWeek desired) {
    // f( c, d ) = [7 - (c - d)] mod 7
    // f( c, d ) = [7 - c + d] mod 7
    // c is current day of week and 0 <= c < 7
    // d is desired day of the week and 0 <= d < 7
    int c = (int)current;
    int d = (int)desired;
    int offset = (7 - c + d) % 7;
    return offset == 0 ? 7 : offset;
}
DateTime now = DateTime.Now.Date;
int offset = CalculateOffset(now.DayOfWeek, DayOfWeek.Friday);
DateTime nextFriday = now.AddDays(offset);
using System;

public class Program
{

    public static DateTime NextDayForDay(DayOfWeek dayOfWeek, DateTime occurringAfter)
    {
        return occurringAfter.AddDays(((dayOfWeek - occurringAfter.DayOfWeek + 6) % 7)+1); 
    }

    public static void Main()
    {
        for (int i=0; i < 7; i++)
        {
            for (int j=0; j < 7; j++)
            {
                DayOfWeek dayOfWeek = (DayOfWeek)(((int)DayOfWeek.Sunday + j) % 7);

                DateTime test = DateTime.Today.AddDays(i);
                Console.WriteLine($"{test}=>Next {dayOfWeek} is {NextDayForDay(dayOfWeek, test)}");
            }
        }   
    }
}