【问题标题】:How to handle DateTime conditions in the best way如何以最佳方式处理 DateTime 条件
【发布时间】:2021-09-18 21:11:27
【问题描述】:

我想将这些时间条件保存在 C# 中的某种列表或数组中。 我有这些时间条件:

  • 周六 12:00 – 周日 08:00

    public bool CheckConditions(DateTime now)
    {
           //Pseudo
           if (now >= "Saturday 12:00" && now <= "Sunday 08:00")
           {
                return true;
           }
    }
    

我很难知道我应该如何解决这个问题,我想我需要一些 if 语句来检查所有这些时间条件。 输入参数将是现在的日期和时间,然后我想检查现在的时间是否在这些条件之间,如果它们是我只想返回 true,否则返回 false。

我希望你明白我在这里寻找什么,并且需要帮助。

谢谢

【问题讨论】:

  • 这能回答你的问题吗? Find if current time falls in a time range
  • var hours = new Dictionary&lt;DayOfWeek, int[]&gt; { [DayOfWeek.Sunday] = new[] { 18, 19, 20, 21, 22, 23 }, [DayOfWeek.Monday] = new[] { 00, 01, 02, 03, 04, 05, 06, 18, 19, 20, 21, 22, 23 }, .. }hours[now.DayOfWeek].Contains(now.Hour)。当然,如果您保证范围是连续的,则可以使用更有效的初始化/检查方法。

标签: c# .net datetime conditional-statements


【解决方案1】:

这是我尝试的方式。

    public class WeekTimeSpan
    {
    public WeekDayTime StartDayTime
        {
        get; set;
        }
    public WeekDayTime EndDayTime
        {
        get; set;
        }

    public bool DoesFallInTimeSpan (DateTime dateTime)
        {
        return StartDayTime.IsLessThan (dateTime) && EndDayTime.IsGreaterThan (dateTime);
        }
    }

public class WeekDayTime
    {
    public DayOfWeek DayOfWeek
        {
        get; set;
        }
    public int HourOfTheDay
        {
        get; set;
        }

    public int MinuteOfHour
        {
        get; set;
        }

    public bool IsGreaterThan (DateTime dateTime)
        {
        if (DayOfWeek > dateTime.DayOfWeek)
            return true;
        if (DayOfWeek < dateTime.DayOfWeek)
            return false;
        if (HourOfTheDay > dateTime.Hour)
            return true;
        if (HourOfTheDay < dateTime.Hour)
            return false;
        return MinuteOfHour > dateTime.Minute;
        }

    public bool IsLessThan (DateTime dateTime)
        {
        if (DayOfWeek < dateTime.DayOfWeek)
            return true;
        if (DayOfWeek > dateTime.DayOfWeek)
            return false;
        if (HourOfTheDay < dateTime.Hour)
            return true;
        if (HourOfTheDay > dateTime.Hour)
            return false;
        return MinuteOfHour < dateTime.Minute;
        }
    }

这是用法。

    public bool CheckConditions (DateTime now)
        {
        List<WeekTimeSpan> timeSpans=new List<WeekTimeSpan>()
        {
            new WeekTimeSpan()
            {
                StartDayTime = new WeekDayTime() { DayOfWeek = DayOfWeek.Friday,HourOfTheDay = 18,MinuteOfHour = 0},
                EndDayTime = new WeekDayTime()   {DayOfWeek = DayOfWeek.Saturday,HourOfTheDay = 6,MinuteOfHour = 0}
            }
        };

        return timeSpans.Exists (span => span.DoesFallInTimeSpan (now));
        }

我们有几个数据结构。 WeekDayTime 代表一周中的时间,WeekTimeSpan 代表一周中的 TimeSpan。如果您正在寻找更精细的时间(例如秒和毫秒),则必须扩展 WeekDayTime 类。

请记住,这对于周六到周日时间跨度这样的极端情况会失败,但适用于您的场景。我建议在将其用于生产之前覆盖边缘情况。

如果它回答了您的问题,请接受。干杯!!

【讨论】:

    猜你喜欢
    • 2021-08-18
    • 1970-01-01
    • 2013-11-27
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多