C# 检查两个时间跨度之间的时间跨度

C# check timespan between two timespans

首先我检查了这个解决方案:

Find if current time falls in a time range

并尝试比较类似该解决方案的时间跨度

public Boolean CalculateDalUren(DateTime datum, TimeSpan? dalStart, TimeSpan? dalEnd)
    {
        Boolean isDal = false;
        TimeSpan timeBetween = datum.TimeOfDay;

        if ((timeBetween >= dalStart))&&(timeBetween < dalEnd)
            {
                isDal = true;
            }
        }
        return isDal;
    }

请注意 dalStart 要么是 21:00 要么是 23:00 而 dalEnd 几乎总是 07:00。我将 DateTime 转换为 Timespan

现在,如果时间跨度为 23:00,则时间大于或等于 dalStart,但因为(这是一个假设)它晚于 dalEnd 它仍然会将 if 语句视为 false。在 02:00 小时时反之亦然。然后不晚于 dalStart 而是早于 dalEnd.

我认为这是因为我的时间跨度为 2 天。从一天的 21:00 小时到第二天的 07:00 小时。有解决方法吗?所以我可以检查第二天早上的时间是否在 21:00 和 07:00 之间。

创建两个日期,即实际日期的 00:00,将 dalStart、dalEnd 时间跨度添加到它们并 如果(数据 > datetimeFromDalStart 和数据 < dateTimeFromDalEnd)....

我认为这符合您的要求。

如果dalEnd小于dalStart,则应该是第二天的TimeSpan。

    public Boolean CalculateDalUren(DateTime datum, TimeSpan? dalStart, TimeSpan? dalEnd)
    {
        Boolean isDal = false;
        DateTime StartDate = DateTime.Today; 
        DateTime EndDate = DateTime.Today;

        //Check whether the dalEnd is lesser than dalStart
        if (dalStart >= dalEnd)
        {
            //Increase the date if dalEnd is timespan of the Nextday 
            EndDate = EndDate.AddDays(1); 
        }

        //Assign the dalStart and dalEnd to the Dates
        StartDate = StartDate.Date + dalStart.Value; 
        EndDate = EndDate.Date + dalEnd.Value;

        if ((datum >= StartDate) && (datum <= EndDate))
        {
            isDal = true;
        }
        return isDal;
    }

试一试。