向前数数,算出a在b之后有多长时间

2024-03-29 15:29:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要一个方法来找出一个日期时间.time一个接一个日期时间.time很简单,但是。。。问题是我的时间值是24小时制的,所以这并不是简单的从一个值到另一个值求反。相反,我需要计算出时间a之后的时间b是多长,如果我要在时间上向前数数,并且在午夜时间循环,即

time_a = 09:00
time_b = 04:00

这里的时间是19小时后的时间

def time_after_time(time_a, time_b):

    a_hour = time_a.hour
    a_minute = time_a.minute
    b_hour = time_b.hour
    b_minute = time_b.minute

    out_hour = b_hour - a_hour
    out_minute = b_minute - a_minute

    if out_hour < 0:
        out_hour += 24

    if out_minute < 0:
        out_hour -= 1
        out_minute += 60

    return datetime.time(out_hour, out_minute)

这是我第一次尝试,但结果是错误的。你知道吗

有人能想出一个更干净/正确的方法来做这件事吗?你知道吗


Tags: 方法datetimereturniftimedef错误时间
3条回答

根据我的经验,必要的是,每当你从外部来源收到一个基于24小时的时间戳时,你应该立即在内部将其转换为绝对时间,例如从1970年开始的秒。例如,参见Chttps://stackoverflow.com/a/12859648/318716中的方法。你知道吗

一旦你做到这一点,那么简单的时间减法就变得简单有效了。你知道吗

如果您不这样做,那么时间戳相差48小时的问题最终会出现。你知道吗

这种转换有时不应基于当前日期/时间,例如,如果您正在对历史存档数据进行分析或回放。你知道吗

timedif = DATETIME_1 - DATETIME_2
print timedif

一定要使用日期时间。日期时间次。。。你知道吗

你可以转换日期时间.time与…约会

datetime.datetime.combine(datetime.datetime.now().date(),datetimeTime_obj)

是09:00-10:00=1小时还是25小时?那最多24小时吗?你知道吗

import datetime

time_a = datetime.time(9,00)
time_b = datetime.time(5,0)
dte = datetime.datetime.now().date()

dt_a = datetime.datetime.combine(dte,time_a)

dt_b = datetime.datetime.combine(dte,time_b)
time_dif = dt_b - dt_a
time_dif2 = dt_a - dt_b
print "TimeDif:",time_dif,time_dif2
#output: 20:00:00 , 04:00:00

以下是我的解决方案:

def time_after_time(time_a, time_b):
    time_a_min = time_a.hour * 60 + time_a.minute
    time_b_min = time_b.hour * 60 + time_b.minute
    out_min = time_b_min - time_a_min
    if out_min < 0:
        out_min += 24 * 60
    return datetime.time(out_min / 60, out_min % 60)

你可以在codepad.org上测试它。你知道吗

相关问题 更多 >