为了账号安全,请及时绑定邮箱和手机立即绑定

如何知道DateTime是否在C#中的DateRange之间

如何知道DateTime是否在C#中的DateRange之间

Smart猫小萌 2019-09-02 15:39:07
我需要知道Date是否在DateRange之间。我有三个日期:// The date rangeDateTime startDate;DateTime endDate;DateTime dateToCheck;简单的解决方案是进行比较,但是有更聪明的方法吗?提前致谢。
查看完整描述

3 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

不,做一个简单的比较对我来说很好看:


return dateToCheck >= startDate && dateToCheck < endDate;

值得考虑的事情:


DateTime在时区方面有点奇怪。它可能是UTC,它可能是“本地的”,它可能是模棱两可的。确保你将苹果与苹果进行比较。

考虑您的起点和终点应该是包容性的还是排他性的。我已经将上面的代码视为包含下限和独占上限。


查看完整回答
反对 回复 2019-09-02
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

通常我会为这些事情创建Fowler's Range实现。


public interface IRange<T>

{

    T Start { get; }

    T End { get; }

    bool Includes(T value);

    bool Includes(IRange<T> range);

}


public class DateRange : IRange<DateTime>         

{

    public DateRange(DateTime start, DateTime end)

    {

        Start = start;

        End = end;

    }


    public DateTime Start { get; private set; }

    public DateTime End { get; private set; }


    public bool Includes(DateTime value)

    {

        return (Start <= value) && (value <= End);

    }


    public bool Includes(IRange<DateTime> range)

    {

        return (Start <= range.Start) && (range.End <= End);

    }

}

用法非常简单:


DateRange range = new DateRange(startDate, endDate);

range.Includes(date)


查看完整回答
反对 回复 2019-09-02
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

您可以使用扩展方法使其更具可读性:


public static class DateTimeExtensions

{

    public static bool InRange(this DateTime dateToCheck, DateTime startDate, DateTime endDate)

    {

        return dateToCheck >= startDate && dateToCheck < endDate;

    }

}

现在你可以写:


dateToCheck.InRange(startDate, endDate)


查看完整回答
反对 回复 2019-09-02
  • 3 回答
  • 0 关注
  • 766 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信