两个时间类型,求时间差和时间和

今天下午接口调完了, 朋友遇到一个题,两个字符串,类似”2:15” “3:42”,求时间差和时间和.
我拿到题的第一反应是使用python 自带的time,datetime.但是发现里面没有方法可以解决这个问题(可能是我没找到)
然后我就考虑自己手动写一个.就是时间求和的函数.很简单.
刚写完的时候,只是完成了功能.

就像下面这样:
# coding:utf-8
def timeadd(str1,str2,operation):
    hour1, minute1, hour2, minute2 = (str1+":"+str2).split(":")
    hour1 = int(hour1); hour2 = int(hour2); minute1 = int(minute1); minute2 = int(minute2)
    if operation == 1:  # 相加
        minutetotal = int(minute1) + int(minute2)
        if minutetotal > 60:
            minute = minutetotal % 60
            hour = hour1 + hour2 + minutetotal/60
        else:
            minute = minutetotal
            hour = hour1 + hour2
        return hour,minute
    elif operation == 2:  # 相减
        if hour1 == hour2:
           return 0,abs(minute1-minute2)
        elif hour1 > hour2:
            if minute1 > minute2:
                return hour1-hour2,minute1-minute2
            else:
                return hour1-hour2-1,minute1+60-minute2
        else:
            if minute2 > minute1:
                return hour2-hour1,minute2-minute1
            else:
                return hour2-hour1-1,minute2+60-minute1

print timeadd("2:15","3:42",1)
print timeadd("2:15","3:42",2)
优化之后的情况:
# coding:utf-8
def timeoperation(str1, str2, operation):
    ret = dict(hour=0, minute=0) #返回一个字典
    hour1, minute1, hour2, minute2 = [int(i) for i in(str1+":"+str2).split(":")] # 为了一次取出所有时间
    houradd, hoursub, minuteadd, minutesub = hour1 + hour2, hour1 - hour2, minute1 + minute2, minute1 - minute2 # 最后发现加减都用到了,就提了出来
    if operation == 1:  # 相加
        ret["hour"] = houradd + (minuteadd)//60#这里如果是python3,必须用//
        ret['minute'] = (minuteadd) % 60
    elif operation == 2:  # 相减
        if hour1 == hour2:
            ret["minute"] = abs(minutesub)
        else:
            if (minutesub) * (hoursub) > 0: #同号的情况
                ret['hour'] = abs(hoursub)
                ret['minute'] = abs(minutesub)
            else: #一个时大,分钟小;一个时小,分钟大.
                ret['hour'] = abs(hoursub) - 1
                ret['minute'] = abs(minutesub) + 60
    return ret
print timeoperation("2:15","3:42",1)
print timeoperation("2:15","3:42",2)

代码不是一次完成的,是一点一点优化出来的.大体思路没问题,降低时间复杂度就好了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值