2014-04-11 50 views
1

我試圖做一些應該與datetime模塊相當簡單:無效語法與日期時間模塊

import datetime 

timenow = datetime.datetime.now().time() 
print timenow 

if timenow >= 00:00:00.00000 and <= 00:15:00.00000 

    #do some processing here 

我選擇了基於「打印timenow」線的結果,我的時間格式,但它在所述的第一次變量中在第二個結腸處引發語法錯誤。

任何人都可以看到我做錯了什麼?

感謝

回答

4

的原因錯誤是Python並不知道如何解釋00:00:00.00000。它不是一個字符串,它不是一個有效的數字文字(如5-3.6),它不是一個變量名稱,函數名稱或關鍵字。所以Python就像「WTF你對我做的人?!」,然後摔倒了。

你需要對你的Python更好。給你一些幫助,你的意思。你可以把這些東西寫成字符串"00:00:00.00000",但是Python仍然不知道訂購日期時間字符串有特殊的規則 - 所以當你進行比較時,你最終可能會遇到問題。

更好的解決方案是永遠不要擔心時間看起來像一個字符串 - 所有你關心的是時間有幾小時,幾分鐘,幾秒和幾微秒。特別是,你似乎只關心幾小時和幾分鐘。

試試這個:

min_time = datetime.time(0,0) 
max_time = datetime.time(0,15) 

if min_time <= timenow <= maxtime: 
    print "Do stuff!" 
+1

確定那很好。非常感謝你的幫助。 – gdogg371

+1

對於人格化的Python而言+1。 – jayelm

2

這應該工作。

import datetime 

timenow = datetime.datetime.now().time() 
print "%s\n" % str(timenow) 

if str(timenow) >= "00:00:00.00000" and str(timenow) <= "00:15:00.00000": 
    print "True" 

你的代碼出了什麼問題?

  • 您無法將日期型類型與字符串進行比較。

  • 當您在if語句中使用「和」時,您必須執行另一個條件。

  • 在if語句所在行的末尾,您忘記了添加:哪一部分是python語法的一部分。

  • 你沒有把你想要比較日期時間的值加上引號。

要確保你明白:

import datetime 

timenow = datetime.datetime.now().time() 
print timenow 
# below u need to put 00:00:00.00000 in quotes. 
if timenow >= 00:00:00.00000 and <= 00:15:00.00000 # you forgot to add : here 

只是問,如果你不明白。

編輯:請注意,所有對象都不能像這樣進行字符串比較。感謝Tom Dalton指出這一點。

「雖然這個工作,它可能會導致一個新的用戶以爲所有的對象可以是字符串比較喜歡這個,但它不會工作,你想這樣的事情的方式:(」 2013" 年12月<「十一月2013「) - > True」 - Tom Dalton

+1

雖然這可行,但它可能會導致新用戶認爲所有對象都可以像這樣進行字符串比較,但它不會按照您希望的方式*進行操作,例如:(「2013年12月」<「2013年11月」) - > True –

+0

很好的解釋:) +1 –

+0

@TomDalton非常真實。沒有想到這一點,因爲我寫了我的答案。用這個信息更新了我的答案。感謝您指出。 –