兩個時間型別,求時間差和時間和
阿新 • • 發佈:2019-02-15
今天下午介面調完了, 朋友遇到一個題,兩個字串,類似”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)
程式碼不是一次完成的,是一點一點優化出來的.大體思路沒問題,降低時間複雜度就好了.