今天下午接口调完了, 朋友遇到一个题,两个字符串,类似”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)
代码不是一次完成的,是一点一点优化出来的.大体思路没问题,降低时间复杂度就好了.