22:11 + 22:22 = 44:33
varible_A = ('22:11')
varible_B = ('22:11')
左边的数字 (22) 是分钟 右边的数字 (11) 是秒
我正在尝试将这两个数字相加得到
total = 44:22
这是一个奖金,但真的会帮助我*
例如,是否可以将数字视为时间...
varible_A = ('22:50')
varible_B = ('22:30')
我想得到45:20
代替
44:80
用于datetime.timedelta()
模拟持续时间:
from datetime import timedelta
def to_delta(value):
minutes, seconds = map(int, value.split(':'))
return timedelta(minutes=minutes, seconds=seconds)
var_a = to_delta('22:50')
var_b = to_delta('22:30')
var_a + var_b
然后,您可以将timedelta()
对象转回分钟 + 秒表示:
def to_minutes_seconds(delta):
return '{:02.0f}:{:02.0f}'.format(*divmod(delta.total_seconds(), 60))
演示:
>>> var_a = to_delta('22:50')
>>> var_b = to_delta('22:30')
>>> var_a + var_b
datetime.timedelta(0, 2720)
>>> to_minutes_seconds(var_a + var_b)
'45:20'
或者,str()
a 的结果timedelta
格式为HH:MM:SS
:
>>> str(var_a + var_b)
'00:45:20'
并且可能也适合您的需求。请注意,对于出现超过一小时的增量,str()
和之间存在差异to_minutes_seconds()
;前者显示小时、分钟和秒,后者只显示分钟,分钟值可以超过 60。代表超过 24 小时的增量会获得额外的天数前缀:
>>> str(timedelta(minutes=65, seconds=10))
'1:05:10'
>>> to_minutes_seconds(timedelta(minutes=65, seconds=10))
'65:10'
>>> str(timedelta(minutes=(60*24)+1, seconds=10))
'1 day, 0:01:10'
我认为这些应该由对象表示,而不是一行理解等......因此我的建议是使用如下类:
class Time(object):
def __init__(self,minutes,seconds):
self.minutes = minutes
self.seconds = seconds
def __add__(self,other):
return Time(self.minutes+other.minutes,self.seconds+other.seconds)
def __str__(self):
return "{0}:{1}".format(self.minutes,self.seconds)
A = Time(22,11)
B = Time(22,22)
print(A+B)
生产
>>>
44:33
您可以使用类似的功能
def add_with_column(*args):
res = (0,0)
for data in args:
nums = map(int, data.split(':'))
res = [i + j for i,j in zip(res, nums)]
return ':'.join([str(res[0] + res[1]/60), str(res[1] % 60)])
>>> add_with_column('22:50', '22:30')
'45:20'
像这样的东西:
>>> def add_time(t1,t2):
h1,s1 = map(int,t1.split(":"))
h2,s2 = map(int,t2.split(":"))
q,r = divmod(s1+s2, 60)
return "{0}:{1:02d}".format( h1+h2+q, r)
...
>>> add_time('22:30','22:50')
'45:20'
>>> add_time('22:30','22:30')
'45:00'
在不导入任何外部机器的情况下执行此操作的简单方法是:
def add(time1,time2):
t1 = map(int,time1.split(':')) # t1[0] is minutes, t1[1] is seconds
t2 = map(int,time2.split(':')) # map will apply int() to both elements of the array
m = t1[0]+t2[0]+(t1[1]+t2[1])/60 # New minutes; recall that 70/60=1 for integer division
s = (t1[1]+t2[1]) % 60 #new seconds
return str(m)+":"+str(s)
add('22:30','22:50') # prints '45:20'
当然,你总是可以从 datetime 导入(这对于实际应用来说可能更好),但是如果你想自己实现时间操作,你可以这样做。
a = '22:50'
b = '22:30'
def add_time(a, b):
a = map(int, a.split(':'))
b = map(int, b.split(':'))
a[1] += b[1]
a[0] += b[0] + a[1]//60
a[1] %= 60
return '{}:{}'.format(*a)
print a, b, add_time(a,b)
你想把时间分成它们的组成部分
def split_time(time):
return time.split(':')
并添加它们
def add_times(time1, time2):
minutes = time1[0] + time2[0]
seconds = time1[1] + time2[1]
return minutes, seconds
并在适当时进行模运算以“进行分钟”
def carry_the_minute(minutes, seconds):
minutes += seconds / 60
seconds %= 60
return minutes, seconds
并创建结果的表示
def represent_time(minutes, seconds):
"""Specifies two-character-wide seconds with leading 0."""
return "{0}:{1:02d}".format(minutes, seconds)
把它们放在一起看起来像这样:
def add_times(time1, time2):
time1 = split_time(time1)
time2 = split_time(time2)
minutes, seconds = add_times(time1, time2)
minutes, seconds = carry_the_minute(minutes, seconds)
print represent_time(minutes, seconds)