2013-01-15 102 views
2

我以這樣的字符串格式獲取時間數據,'HH:MM',例如'13:33'將是13小時33分鐘。將字符串轉換爲datime.time,錯誤?

所以,我用這個代碼來獲取時間對象,它的偉大工程

datetime.datetime.strptime('13:33', '%H:%M').time() 

不過,我現在有了新的problem.New字符串開始代表超過24小時,datetime.datetime.strptime('25:33', '%H:%M').time()就乾脆fail.What的到來你的建議?

+3

建議是爲了什麼?你期望得到什麼? '25:33'不是時候。 – Eevee

+1

等一下,對不起,我明白你的意思了。你想要一個_amount_時間,就像秒錶一樣,對嗎? – Eevee

回答

0

當你說「它會失敗」時,我假設你想知道它何時會失敗。這裏有一個方法:

>>> import datetime 
>>> 
>>> time_strs = [ 
... "13:33", 
... "25:33", 
... "12:88" 
... ] 
>>> 
>>> for s in time_strs: 
...  try: 
...   print datetime.datetime.strptime(s, '%H:%M').time() 
...  except ValueError: 
...   print "Bad time: {0}".format(s) 
... 
13:33:00 
Bad time: 25:33 
Bad time: 12:88 
0

你必須手動做到這一點,唉。

def parse_stopwatch(s): 
    hours, minutes = s.split(':', 1) 
    return datetime.time(hour=int(hours), minute=int(minutes)) 

這真是愚蠢的,理所當然的。您可以自動將超過60分鐘的時間轉換爲小時,或者使用正則表達式獲得所有幻想,或者添加對數秒或數秒的支持。但是,您必須更具體地瞭解這些數據來自何處以及它應該代表什麼。 :)

+0

糟糕。修正了。 – Eevee

1

A datetime.time對象代表(當地)當日時間,與任何特定日期無關。

你不應該用它來表示一段時間,就像你看起來那樣。

更適當可能是一個datetime.timedelta

timedelta對象表示的持續時間,兩個日期或時間之間的差。

class datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])

所有的參數都是可選的,默認爲0參數可能的int,long或浮動,並且可以是正的或負。

一個例子:

>>> from datetime import timedelta 
>>> d = timedelta(hours=25,minutes=10) 
>>> d 
datetime.timedelta(1, 4200) #Days, seconds