Python datetime timedelta在day parm中发出前导0的问题

时间:2014-02-24 19:04:30

标签: python datetime timedelta

Ok所以看起来文档中可能存在错误或缺少某些内容。例如,如果您在日期parm中添加前导0,则会得到与没有它的情况不同的结果,请参阅示例:

>>> 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)

3 个答案:

答案 0 :(得分:1)

前导0表示该数字被解释为八进制数(基数为8)。所以063实际上是十进制的51。

答案 1 :(得分:1)

063是八进制数:

>>> 063
51

因为(6 * 8)+ 3是51。

来自integer literals documentation

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

在Python 3中,语法的"0" octdigt+部分被删除,因为有太多人不停地绊倒它; {3}中的063语法错误。

答案 2 :(得分: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