1. 程式人生 > >兩個時間型別,求時間差和時間和

兩個時間型別,求時間差和時間和

今天下午介面調完了, 朋友遇到一個題,兩個字串,類似”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)

程式碼不是一次完成的,是一點一點優化出來的.大體思路沒問題,降低時間複雜度就好了.