有意思的日期判断

good-code 2014-02-18 04:46:38
怎么判断当前时间是否在两个时间范围内?包括跨天的
比如时间范围:A每天晚上的20:00:00 到 B第二天的早上的:08:00:00

C为当前时间凌晨的02:00:00

那么如何判断C是在A和B的范围内?一个条件肯定是不行的。。。求各路指教。
...全文
311 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
神奇的章鱼哥 2014-02-20
  • 打赏
  • 举报
回复
大于等于20,笔误
神奇的章鱼哥 2014-02-20
  • 打赏
  • 举报
回复
只管小时,大于等于22或者小于8就行
jiaoshiyao 2014-02-20
  • 打赏
  • 举报
回复
gomoku 2014-02-20
  • 打赏
  • 举报
回复
引用 7 楼 wjmo520 的回复:

static bool InBetween(TimeSpan begin, TimeSpan end, TimeSpan toCheck)
{
    if (begin.TotalDays > 1 || end.TotalDays > 1 || toCheck.TotalDays > 1)
    {
        throw new Exception("Not a valid time of a day");
    }
    // 如果起始时间晚于结束时间,反转结果
    return (begin <= toCheck && toCheck <= end) ^ (begin > end);
}
下午13:00:00的时候应该为false的 何解也为true呢
那时因为我的代码里的逻辑错误,可以更改为如下():

static bool InBetween(TimeSpan begin, TimeSpan end, TimeSpan toCheck)
{
    if (begin.TotalDays > 1 || end.TotalDays > 1 || toCheck.TotalDays > 1)
    {
        throw new Exception("Not a valid time of a day");
    }

    if (begin <= end) return begin <= toCheck && toCheck <= end;
    else return begin <= toCheck || toCheck <= end;
}
本拉灯 2014-02-19
  • 打赏
  • 举报
回复
你只要计算 大于20点 或小于8点就行了,不用管日期 if(DateTime.Now.Hour < 8 || DateTime.Now.Hour > 20)) { }
zhouxingyu896 2014-02-19
  • 打赏
  • 举报
回复
学习 学习 帮顶.
emailtome 2014-02-19
  • 打赏
  • 举报
回复
check Today 8:00~20:00 !dateTimeRange.Contains(c)
gomoku 2014-02-19
  • 打赏
  • 举报
回复
一天中的时间可以用TimeSpan来表示,比如DotNet的TimeOfDay: TimeSpan ts = DateTime.Now.TimeOfDay; 而TimeSpan可以直接比较。

static bool InBetween(TimeSpan begin, TimeSpan end, TimeSpan toCheck)
{
    if (begin.TotalDays > 1 || end.TotalDays > 1 || toCheck.TotalDays > 1)
    {
        throw new Exception("Not a valid time of a day");
    }
    // 如果起始时间晚于结束时间,反转结果
    return (begin <= toCheck && toCheck <= end) ^ (begin > end);
}

static void Test()
{
    TimeSpan begin = TimeSpan.FromHours(20);
    TimeSpan end = TimeSpan.FromHours(8);
    TimeSpan toCheck = TimeSpan.Parse("02:00:00");

    bool inbetween = InBetween(begin, end, toCheck); // true
}
种草德鲁伊 2014-02-19
  • 打赏
  • 举报
回复
把年月日去掉再比较就好了,因为时间段是每天都有效的
md5e 2014-02-19
  • 打赏
  • 举报
回复
(23 - 20 + 8)%23==11 ((23-开始时间+结束时间)%23) (23-当前时间 + 结果时间)%23 <=11者为时间范围内,反之False 假设开始时间为1,结果时间为13 (23-1 + 13)%23=12 现在时间为5 (23-5+13)%23=8 结果<=12,在范围内 现在时间为14点 (23-14+13)%23=22 结果>12 不在范围内 当前时间为23点 (23-23+13)%23=13 结果>12 也不在范围内 ===========》 设置开始时间为0点,结果时间为2点 (23-0+2)%23=2 当前时间为1 (23-1+2)%23=1 结果<=2,在范围内 当前时间为3 (23-3+2)%23=22 结果>2,不在范围内 当前时间为20 (23-20+2)%23=5 结果>2,不在范围内
lc_ant 2014-02-19
  • 打赏
  • 举报
回复
时间可以相减的吧
good-code 2014-02-19
  • 打赏
  • 举报
回复
引用 6 楼 gomoku 的回复:
一天中的时间可以用TimeSpan来表示,比如DotNet的TimeOfDay: TimeSpan ts = DateTime.Now.TimeOfDay; 而TimeSpan可以直接比较。

static bool InBetween(TimeSpan begin, TimeSpan end, TimeSpan toCheck)
{
    if (begin.TotalDays > 1 || end.TotalDays > 1 || toCheck.TotalDays > 1)
    {
        throw new Exception("Not a valid time of a day");
    }
    // 如果起始时间晚于结束时间,反转结果
    return (begin <= toCheck && toCheck <= end) ^ (begin > end);
}

static void Test()
{
    TimeSpan begin = TimeSpan.FromHours(20);
    TimeSpan end = TimeSpan.FromHours(8);
    TimeSpan toCheck = TimeSpan.Parse("02:00:00");

    bool inbetween = InBetween(begin, end, toCheck); // true
}
下午13:00:00的时候应该为false的 何解也为true呢
rtdb 2014-02-18
  • 打赏
  • 举报
回复
最简单的: DateTime now = DateTime.Now; if(now.Hour < 8 || now.Hour > 20)) { }
feiyun0112 2014-02-18
  • 打赏
  • 举报
回复
A每天晚上的20:00:00
就是TimeSpan(20,0,0)

第二天的早上的:08:00:00
就是TimeSpan(24+8,0,0)

前时间凌晨的02:00:00
就是TimeSpan(2,0,0) or TimeSpan(24 + 2,0,0)




*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/
jdcj413 2014-02-18
  • 打赏
  • 举报
回复
取不到时间的天吗?
Ny-6000 2014-02-18
  • 打赏
  • 举报
回复
有时间比较方法的啊,系统自带的.
rtdb 2014-02-18
  • 打赏
  • 举报
回复
DateTime直接比大小:

            DateTime now = DateTime.Now;
            DateTime old = DateTime.Now - new TimeSpan(1, 0,0,0);
            DateTime later = DateTime.Now + new TimeSpan(1, 0, 0, 0); ;
            Assert.IsTrue(now > old);
            Assert.IsTrue(now < later);

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧