Python 计算出a在时间b之后的时间
我需要一种方法来找出一个日期时间有多长。时间在另一个日期时间之后。时间很简单,但是。。。问题是我的时间值是24小时的,所以它不像从一个值到另一个值求反那么简单。相反,我需要计算出时间a之后的时间b是多长,如果我在时间上向前计数,在午夜时间循环,即Python 计算出a在时间b之后的时间,python,datetime,Python,Datetime,我需要一种方法来找出一个日期时间有多长。时间在另一个日期时间之后。时间很简单,但是。。。问题是我的时间值是24小时的,所以它不像从一个值到另一个值求反那么简单。相反,我需要计算出时间a之后的时间b是多长,如果我在时间上向前计数,在午夜时间循环,即 time_a = 09:00 time_b = 04:00 这里的时间是时间a后19小时 def time_after_time(time_a, time_b): a_hour = time_a.hour a_minute = ti
time_a = 09:00
time_b = 04:00
这里的时间是时间a后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)
def time_-after_-time(time_a,time_b):
一小时=一小时的时间
一分钟=一分钟
小时=时间
分钟=时间分钟
外出时间=休息时间-休息时间
out_minute=b_minute-a_minute
如果超时时间<0:
外出时间+=24小时
如果输出时间小于0分钟:
外出时间-=1
分钟外+=60
return datetime.time(out\u小时,out\u分钟)
这是我第一次尝试,但结果是错误的
有人能想出一个更干净/正确的方法吗
timedif = DATETIME_1 - DATETIME_2
print timedif
请确保使用datetime.datetime时间
您可以使用将datetime.time转换为datetime
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
请确保使用datetime.datetime时间
您可以使用将datetime.time转换为datetime
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
根据我的经验,无论何时从外部来源收到基于24小时的时间戳,都必须立即在内部将其转换为绝对时间,例如1970年的秒数。有关执行此操作的方法,请参见C
中的示例
一旦你这样做了,那么简单的时间减法就变得简单有效了
如果不这样做,则时间戳相差48小时的问题最终会出现
例如,如果您正在对历史存档数据进行分析或回放,则这种转换有时不应以当前日期/时间为基础。根据我的经验,当您从外部来源收到基于24小时的时间戳时,必须立即在内部将其转换为绝对时间,比如1970年的秒数。有关执行此操作的方法,请参见C
中的示例
一旦你这样做了,那么简单的时间减法就变得简单有效了
如果不这样做,则时间戳相差48小时的问题最终会出现
例如,如果您正在对历史存档数据进行分析或回放,则这种转换有时不应基于当前日期/时间。第二个答案(由于第一个答案中给出的原因,我不建议这样做)。在C
中,您可以:
int time1MinusTime2Positive(int t1, int t2) { // returns dt from 0 to <24 hours
return fmod(t1 - t2 + 100 * 24 * 60 * 60, 24 * 60 * 60);
}
int time1MinusTime2(int t1, int t2) { // returns dt between -12 and +12 hours
const int dt = t1 - t2;
if (dt > 24 * 60 * 60 / 2)
return dt - 24 * 60 * 60;
else if (dt < -24 * 60 * 60 / 2)
return dt + 24 * 60 * 60;
else
return dt;
}
int-time1MinusTime2Positive(int-t1,int-t2){//返回从0到24*60*60/2的dt)
返回dt-24*60*60;
否则如果(dt<-24*60*60/2)
返回dt+24*60*60;
其他的
返回dt;
}
这里的输入时间表示为从午夜开始的秒数,或者从1970年开始的秒数,或者从1900年开始的秒数——这无关紧要。输出以秒为单位,相对于“当前”午夜,无论“当前”是什么意思。第二个答案(由于第一个答案中给出的原因,我不建议这样做)。在C
中,您可以:
int time1MinusTime2Positive(int t1, int t2) { // returns dt from 0 to <24 hours
return fmod(t1 - t2 + 100 * 24 * 60 * 60, 24 * 60 * 60);
}
int time1MinusTime2(int t1, int t2) { // returns dt between -12 and +12 hours
const int dt = t1 - t2;
if (dt > 24 * 60 * 60 / 2)
return dt - 24 * 60 * 60;
else if (dt < -24 * 60 * 60 / 2)
return dt + 24 * 60 * 60;
else
return dt;
}
int-time1MinusTime2Positive(int-t1,int-t2){//返回从0到24*60*60/2的dt)
返回dt-24*60*60;
否则如果(dt<-24*60*60/2)
返回dt+24*60*60;
其他的
返回dt;
}
这里的输入时间表示为从午夜开始的秒数,或者从1970年开始的秒数,或者从1900年开始的秒数——这无关紧要。输出以秒为单位,相对于“当前”午夜,无论“当前”是什么意思。以下是我的解决方案:
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)
def time_-after_-time(time_a,time_b):
时间每分钟=时间每小时*60+时间每分钟
time_b_min=time_b.hour*60+time_b.minute
out\u min=time\u b\u min-time\u a\u min
如果out_min<0:
out_min+=24*60
return datetime.time(out\u min/60,out\u min%60)
您可以对其进行测试。以下是我的解决方案:
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)
def time_-after_-time(time_a,time_b):
时间每分钟=时间每小时*60+时间每分钟
time_b_min=time_b.hour*60+time_b.minute
out\u min=time\u b\u min-time\u a\u min
如果out_min<0:
out_min+=24*60
return datetime.time(out\u min/60,out\u min%60)
您可以在上进行测试。为什么不使用
datetime.timedelta
time\u b-time\u a
将生成timedelta
。这适用于datetime.datetime对象,但不适用于datetime.time对象unfortunatley@MartijnPieters看起来假设时间是同一天。。。所以,不太确定预期的答案是什么…是09:00-10:00=1小时还是25小时?那么最长是24小时吗?那么如果a
=09:00和b
=10:00,那么b
是a
之后的1小时,但是a
是b
之后的23小时,如果这是合理的,为什么不使用datetime.timedelta
time\u b-time\u a
将生成timedelta
。这适用于datetime.datetime对象,但不适用于datetime.time对象unfortunatley@MartijnPieters看起来假设时间是同一天。。。所以,不太确定预期的答案是什么…是09:00-10:00=1小时还是25小时?那么最长是24小时吗?因此,如果a
=09:00和b
=10:00,那么b
是a
之后的1小时,但是a
是b
之后的23小时,如果这是合理的,则其时差不得超过23:59小时。。。根据他的问题statement@JoranBeasley:也许我是盲人,但我在问题陈述中看不到这一点。如果是这样的话,这就不会是一个现实世界的问题。但不幸的是,我也看到了许多不正确的“现实世界”解决方案。这对我建议的解决方案没有影响。时代应该改变