問題:
在 Python 中有一個用來處理時間的 library: datetime - basic date and time object. 透過他你可以很方便的表示與處理時間, 舉例來說當你需要計算時間差時 (某個 task 花的時間), 你可以在開始某個工作開始執行前先執行 datetime.now() 獲得代表當前時間的 datetime 物件, 接著在執行完工作後再次執行 datetime.now() 並減掉之前獲得的 datetime 物件 (會得到 timedelta 物件.), 便可以得到執行前到執行後間的時間差:
現在問題來了, "(0, 41, 732000)" 的表示方法不容易懂, 因此你可以希望將之表示為 "xx 分 xx 秒" , 下面介紹幾個方法來處理 timedelta 物件的 format.
方法一:
我們可以參考 "strftime() and strptime() Behavior", 取出 timedelta 物件的資料然後丟入一個 HashMap, 在使用 string 的 printf 方式印出客製後格式的字串. 首先我們來撰寫代碼如下, 設計一個函數 strfdelta(tdelta, fmt) 並將 timedelta 物件 tdelta 根據格式字串 fmt 輸出我們的結果.
- from string import Template
- class DeltaTemplate(Template):
- delimiter = "%"
- def strfdelta(tdelta, fmt):
- d = {"D": tdelta.days}
- d["H"], rem = divmod(tdelta.seconds, 3600)
- d["M"], d["S"] = divmod(rem, 60)
- t = DeltaTemplate(fmt)
- return t.substitute(**d)
方法二:
如果你的時間格式不常變的話, 其實可以不用如方法一這樣麻煩, 參考代碼如下:
- import datetime as dt
- turnaround = dt.timedelta(days = 1, hours = 3, minutes = 42, seconds = 54)
- total_seconds = int(turnaround.total_seconds())
- hours, remainder = divmod(total_seconds,60*60)
- minutes, seconds = divmod(remainder,60)
- print('{} hrs {} mins {} secs'.format(hours,minutes,seconds))
沒有留言:
張貼留言