Python午夜时间比较



我必须用AM PM格式来节省时间。

但是我在决定如何进入午夜时间有麻烦。

假设时间是晚上9点到第二天早上6点。我必须把它分成每天的基础。这样的

t1 = datetime.datetime.strptime('09:00PM', '%I:%M%p').time()
t2 = datetime.datetime.strptime('12:00AM', '%I:%M%p').time()
t3 = datetime.datetime.strptime('06:00AM', '%I:%M%p').time()

现在我想知道t2是否应该是

12:00 AM11.59PM

如果我做12:00AM,那么我不能比较9pm > 12am,但11.59看起来很奇怪,或者可能是正确的

您应该始终使用00:00(或12:00 AM)来表示午夜。

使用23:59(或11:59 PM)是有问题的,原因如下:

  • 精度在比较中很重要。23:59:01不是在午夜之前吗?23:59:59.9999呢?

  • 持续时间计算将被您选择的任何精度所抛弃。考虑10:00 pm到午夜是2小时,而不是1小时59分钟。

为了避免这些问题,您应该始终将时间间隔视为半开间隔。也就是说,范围有一个包含的开始和一个排除的结束。间隔符号:[start, end)

现在关于跨越午夜边界:

  • 当您比较与日期相关的时间时,您可以直接比较:

    [2015-01-01T21:00,  2015-01-02T06:00) = 9 hours
     2015-01-01T21:00 < 2015-01-02T06:00 
    
  • 当您没有日期时,您可以确定持续时间,但您无法确定顺序!

    [21:00, 06:00) = 9 hours
     21:00 < 06:00  OR  21:00 > 06:00
    

    您能做的最好的事情是确定范围所覆盖的点之间的时间是否为

    Both 23:00 and 01:00 are in the range [21:00, 06:00)
    21:00 is also in that range, but 06:00 is NOT.
    

    想想时钟。它的模型是一个圆圈,而不是一条直线。

  • 要计算可以跨越午夜的时间间隔的持续时间,请使用以下伪代码:

    if (start <= end)
        duration = end - start
    else
        duration = end - start + 24_hours
    

    或者更简单:

    duration = (end - start + 24_hours) % 24_hours
    
  • 要确定仅限时间值是否落在可以跨越午夜的仅限时间间隔内,请使用以下伪代码:

    if (start <= end)
        is_between = start <= value AND end > value
    else
        is_between = start <= value OR  end > value
    

请注意,在上面的伪代码中,我指的是数值的幅度,而不是逻辑时间值,如前所述,如果没有参考日期,就不能独立比较逻辑时间值。

此外,其中大部分内容都涵盖在我的日期和时间基础课程Pluralsight(接近最后,在"使用范围"中)。

如何制作t1 = 09:00PM, t2 = 11.59PM, t3 = 12:00AMt4 = 06:00AM。这样你每天就有了明确的时间范围。当然,添加日期也会使时差变得明显。

相关内容

  • 没有找到相关文章