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#_Date_Datetime_Timestamp_Date Range - Fatal编程技术网

C# 分割日期时间范围的有效方法

C# 分割日期时间范围的有效方法,c#,date,datetime,timestamp,date-range,C#,Date,Datetime,Timestamp,Date Range,我有两个日期时间,X和Y。其中X总是出现在Y之前。它们之间可能相差几毫秒到几年。我怎样才能在约会结束时(00:00)有效地将他们分开 这里有一个方法可以完成您想要的分区。注意:没有检查以确保初始的start在end之前 public IEnumerable<(DateTime Start, DateTime End)> DaySplit(DateTime start, DateTime end) { var partition = start.AddDays(1).Date;

我有两个日期时间,X和Y。其中X总是出现在Y之前。它们之间可能相差几毫秒到几年。我怎样才能在约会结束时(00:00)有效地将他们分开


这里有一个方法可以完成您想要的分区。注意:没有检查以确保初始的
start
end
之前

public IEnumerable<(DateTime Start, DateTime End)> DaySplit(DateTime start, DateTime end)
{
    var partition = start.AddDays(1).Date;
    while(partition < end)
    {
        yield return (start, partition);
        start = partition;
        partition = start.AddDays(1);
    }

    yield return (start, end);
}
public IEnumerable dayspilt(日期时间开始,日期时间结束)
{
var partition=start.AddDays(1.Date);
while(分区<结束)
{
收益率回报(开始、分割);
开始=分区;
分区=开始。添加天数(1);
}
收益率回报(开始、结束);
}

请注意,这将延迟创建范围,因此您必须在
foreach
循环中或通过调用
ToList
ToArray
来迭代它以获取值。此外,它还使用C#7中的值元组。您可以改为使用
Tuple
或自定义类型。

这里有一个方法可以完成您想要的分区。注意:没有检查以确保初始的
start
end
之前

public IEnumerable<(DateTime Start, DateTime End)> DaySplit(DateTime start, DateTime end)
{
    var partition = start.AddDays(1).Date;
    while(partition < end)
    {
        yield return (start, partition);
        start = partition;
        partition = start.AddDays(1);
    }

    yield return (start, end);
}
public IEnumerable dayspilt(日期时间开始,日期时间结束)
{
var partition=start.AddDays(1.Date);
while(分区<结束)
{
收益率回报(开始、分割);
开始=分区;
分区=开始。添加天数(1);
}
收益率回报(开始、结束);
}

请注意,这将延迟创建范围,因此您必须在
foreach
循环中或通过调用
ToList
ToArray
来迭代它以获取值。此外,它还使用C#7中的值元组。您可以改为使用
元组
或自定义类型。

取开始日期,添加一天,截断时间。如果在结束日期之前,那么您有一个分区。继续这样做,直到日期在结束之后。取开始日期,加上一天,截短时间。如果在结束日期之前,那么您有一个分区。继续这样做,直到日期在结束之后。