Python datetime.strptime 月份说明符似乎无效
月份格式的说明似乎不太好用。
from datetime import datetime
endDate = datetime.strptime('10 3 2011', '%j %m %Y')
print endDate
2011-01-10 00:00:00
endDate = datetime.strptime('21 5 1987', '%j %m %Y')
print endDate
1987-01-21 00:00:00
根据手册的说明,手册上说:
%m = 以十进制数字表示的月份 [01,12]。
那么,我到底漏掉了什么呢?除了因为想搞明白为什么我的django __filter查询什么都不返回而抓狂(输入的日期不合法!)之外,我还试过 03
和 05
,结果也没用。
关于版本、平台、架构等信息:
$ python --version
Python 2.7
$ python3 --version
Python 3.1.2
$ uname -r
2.6.35.11-83.fc14.x86_64 (that's Linux/Fedora 14/64-bit).
3 个回答
2
%j
是用来表示一年中的第几天的。比如说,1月10号是这一年的第10天,而3月份是不会有第10天的,所以你指定的月份被忽略了。简单来说,就是输入的数据不正确,输出的结果也不会对。
3
难道%j
不是“一年中的第几天”的格式吗?这可能会让strptime
选择1月21日,忽略%m
的规则吗?
6
你不能把 %j
和其他格式代码像 %m
混在一起使用,因为如果你查看你链接的表格,%j 表示一年中的第几天,以十进制数字表示 [001,366],所以 10 对应的是一年中的第 10 天,也就是 1 月 10 日……
所以你只需要写:
>>> datetime.strptime('10 2011', '%j %Y')
datetime.datetime(2011, 1, 10, 0, 0)
如果你想把 10 当作这个月的第几天来用,你应该这样做:
>>> datetime.strptime('10 3 2011', '%d %m %Y')
datetime.datetime(2011, 3, 10, 0, 0)