问题描述
鉴于当前时间 23:30:00
,我添加了两个小时(7200秒)。如何获得同一天的时间?所以我想要结果 25:30:00
。
Given a current time of 23:30:00
and I add two hours (7200 seconds). How can I get the time of the same day? So I want as a result 25:30:00
.
目前我只能得到第二天:
Currently I am only able to get the time of the next day:
>>> from datetime import datetime, timedelta
>>> current_time = "23:30:00"
>>> duration = 3600
>>> (datetime.strptime(current_time, "%H:%M:%S") + timedelta(seconds=duration)).strftime("%H:%M:%S")
'00:30:00'
推荐答案
如果您只想增加小时数,秒,并创建一个字符串:
If you are just wanting to increment hours minutes, seconds and create a string:
def weird_time(current_time,duration):
start = datetime.strptime(current_time, "%H:%M:%S")
st_hr, st_min, st_sec = start.hour, start.minute, start.second
mn, secs = divmod(duration, 60)
hour, mn = divmod(mn, 60)
mn, secs = st_min+mn, st_sec+secs
if secs > 59:
m, secs = divmod(secs,60)
mn += m
if mn > 59:
h, mn = divmod(mn,60)
hour += h
return "{:02}:{:02}:{:02}".format(st_hr+hour, mn, secs)
输出:
In [19]: weird_time("23:30:00",7200)
Out[19]: '25:30:00'
In [20]: weird_time("23:30:00",3600)
Out[20]: '24:30:00'
In [21]: weird_time("23:30:59",7203)
Out[21]: '25:31:02'
In [22]: weird_time("23:30:59",3601)
Out[22]: '24:31:00'
自己计算,我们也可以使用timedelta计算总秒数,并从中进行计算:
Instead of doing all the calculations ourselves we can also use timedelta to calculate the total seconds and do our calculations from that:
from datetime import datetime,timedelta
def weird_time(current_time,duration):
start = datetime.strptime(current_time, "%H:%M:%S")
st_hr, st_min, st_sec = start.hour, start.minute, start.second
comb = timedelta(minutes=st_min,seconds=st_sec) + timedelta(seconds=duration)
mn, sec = divmod(comb.total_seconds(), 60)
hour, mn = divmod(mn, 60)
return "{:02}:{:02}:{:02}".format(int(st_hr+hour), int(mn), int(sec))
哪个输出相同:
In [29]: weird_time("23:30:00",7200)
Out[29]: '25:30:00'
In [30]: weird_time("23:30:00",3600)
Out[30]: '24:30:00'
In [31]: weird_time("23:30:59",7203)
Out[31]: '25:31:02'
In [32]: weird_time("23:30:59",3601)
Out[32]: '24:31:00'
In [33]: weird_time("05:00:00",3600)
Out[33]: '06:00:00'
小时只需要增加,我们需要抓住的部分是当任一秒,分钟或两者的总和大于59时。
The hours just need to be incremented, the part that we need to catch is when either the combined total of either seconds, minutes or both is greater than 59.
这篇关于添加timedelta时,如何在第二天开始使用datetime?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!