2014-02-24 84 views
-1

好吧所以它看起來像可能有缺陷或文件中缺少的東西。如果添加了領先的0到天PARM例如,你會得到不同的結果,如果沒有它,見樣品:Python日期時間timedelta問題與天數領先0 parm

>>> import datetime 
>>> datetime.date.today() - datetime.timedelta(063) 
datetime.date(2014, 1, 4) 
>>> datetime.date.today() - datetime.timedelta(63) 
datetime.date(2013, 12, 23) 
>>> datetime.date.today() - datetime.timedelta(days=63) 
datetime.date(2013, 12, 23) 
>>> datetime.date.today() - datetime.timedelta(days=063) 
datetime.date(2014, 1, 4) 
>>> datetime.date.today() - datetime.timedelta(days=063) 
datetime.date(2014, 1, 4) 
>>> datetime.date.today() - datetime.timedelta(days=int(063)) 
datetime.date(2014, 1, 4) 
+1

你給它八進制數。 –

+0

這不是日期時間問題,而是Python的整數文字的誤解。 – holdenweb

+0

謝謝你明白了,希望這可以幫助別人。 – radtek

回答

1

我不認爲這是關係到timedelta,我試圖在本手冊第一看: http://docs.python.org/2/library/datetime.html#timedelta-objects

然後我嘗試了一些東西明顯:

>>> int = 063 
>>> int 
51 

它看起來像一個數字類型的領先地位被理解爲python的八進制值。另外,如果它以0x開頭,它被認爲是一個十六進制,這是有道理的。前導0真的把我摔下,但它也回答了這一主題:

How does python interpret numbers with leading zeroes

1

領先0意味着數字被解釋爲一個八進制數(基數爲8)。所以063實際上是十進制的51。

1

063是一個八進制數:

>>> 063 
51 

因爲(6 * 8)+ 3爲51.

integer literals documentation

octinteger  ::= "0" ("o" | "O") octdigit+ | "0" octdigit+ 

在Python 3 ,語法的"0" octdigt+部分被刪除,因爲peo太多人們一直在絆倒這個; 063將是一個語法錯誤在Python 3