1
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
4

7 回答 7

7

用于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'
于 2013-05-17T14:39:33.397 回答
2

我认为这些应该由对象表示,而不是一行理解等......因此我的建议是使用如下类:

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
于 2013-05-17T14:42:12.257 回答
2

您可以使用类似的功能

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'
于 2013-05-17T14:44:32.433 回答
1

像这样的东西:

>>> 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'
于 2013-05-17T14:39:15.880 回答
1

在不导入任何外部机器的情况下执行此操作的简单方法是:

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 导入(这对于实际应用来说可能更好),但是如果你想自己实现时间操作,你可以这样做。

于 2013-05-17T14:46:24.863 回答
1
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)
于 2013-05-17T14:47:09.230 回答
1

你想把时间分成它们的组成部分

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)
于 2013-05-17T14:50:09.833 回答