2010-06-22 63 views

回答

10

是的,有一個很好的簡單方法,你可以在大多數語言使用,而不必閱讀本手冊的日期時間庫。這種方法也可以外推到盎司/磅/噸等等等等:

seconds_per_unit = {"s": 1, "m": 60, "h": 3600, "d": 86400, "w": 604800} 

def convert_to_seconds(s): 
    return int(s[:-1]) * seconds_per_unit[s[-1]] 
+0

哈哈,+1和布拉沃,我很尷尬,這不會發生在我身上!我仍然建議每個人都學習如何使用'datetime'庫和'timedelta'類來完成這種任務,因爲在很多情況下這將是最方便的選擇。但是,我必須承認,對於這個特定的問題,你的解決方案比我的解決方案更好。 – 2010-06-22 22:30:01

+0

是啊+1這是相當簡單,優雅的方法來實現我想要的..謝謝! – Andrew 2010-06-23 17:13:27

7

我建議使用the timedelta class從datetime模塊:

from datetime import timedelta 

UNITS = {"s":"seconds", "m":"minutes", "h":"hours", "d":"days", "w":"weeks"} 

def convert_to_seconds(s): 
    count = int(s[:-1]) 
    unit = UNITS[ s[-1] ] 
    td = timedelta(**{unit: count}) 
    return td.seconds + 60 * 60 * 24 * td.days 

內部,timedelta對象存儲的一切,微秒,秒和日期。因此,儘管您可以以毫秒或幾個月或幾年爲單位給出參數,但最終必須將您創建的timedelta轉換回秒。

如果**的語法讓你感到困惑,那就是Python apply語法。基本上,這些函數調用都是等價的:

def f(x, y): pass 

f(5, 6) 
f(x=5, y=6) 
f(y=6, x=5) 

d = {"x": 5, "y": 6} 
f(**d) 
+0

我發誓我沒有複製你的答案;-) +1,我想我會刪除我的。 – 2010-06-22 20:38:52

相關問題