strptime 似乎从周数创建了错误的日期
strptime seems to create wrong date from week number
strptime 似乎从周数创建了错误的日期...
第一种情况:
dt1 = dateutil.parser.parse('2016-01-04 00:00:00+01:00')
dt1.isocalendar()
=> (2016, 1, 1) # (year, week number, week day)
from datetime import datetime
datetime.strptime('2016 1 1', '%Y %W %w')
=> datetime.datetime(2016, 1, 4, 0, 0)
# OK
第二种情况:
dt1 = dateutil.parser.parse('2015-12-28 00:00:00+01:00')
dt1.isocalendar()
=> (2015, 53, 1) # (year, week number, week day)
datetime.strptime('2015 53 1', '%Y %W %w')
=> datetime.datetime(2016, 1, 4, 0, 0)
# Should return datetime.datetime(2015, 12, 28, 0, 0)
怎么了?
这里的事情是,当你给
from datetime import datetime
print(datetime.strptime('2015 52 1', '%Y %W %w'))
o/p : 2015-12-28 00:00:00
你会得到以上的日子。
%W The week number of the year (Monday as the first day of the week) as a decimal number [00,53]; leading zeros are permitted but not required.
这需要从星期一开始的第一天。
当你尝试这个时
from datetime import datetime
print(datetime.strptime('2015 1 1', '%Y %W %w'))
它会说 2015-01-05 00:00:00
。所以,当我们来到 2015 年的第 53 周时。strptime 函数采用 2016 年的第一个星期一。所以你得到 4-01-2016。
更新:
当你尝试这个时
from datetime import datetime
print(datetime.strptime('2015 52 1', '%Y %W %w'))
o/p : 2015-12-28 00:00:00
这是 2015 年的最后一周。
from datetime import datetime
print(datetime.strptime('2015 53 1', '%Y %W %w'))
print(datetime.strptime('2016 1 1', '%Y %W %w'))
这两个会给你相同的结果。
strptime %W
使用常规日历周。 ISO week date 与常规日历不同。年准确地分为 52 或 53 周(364 或 371 天)。
目前 python 的 strptime 不支持 iso 周日期,但计划用于 python 3.6。然后你可以使用 %G %V %w
(我认为)来解析 iso 周日期。 http://bugs.python.org/issue12006
在那之前,您可以使用 isoweek 包来解析 iso 周日期。
https://pypi.python.org/pypi/isoweek/
strptime 似乎从周数创建了错误的日期...
第一种情况:
dt1 = dateutil.parser.parse('2016-01-04 00:00:00+01:00')
dt1.isocalendar()
=> (2016, 1, 1) # (year, week number, week day)
from datetime import datetime
datetime.strptime('2016 1 1', '%Y %W %w')
=> datetime.datetime(2016, 1, 4, 0, 0)
# OK
第二种情况:
dt1 = dateutil.parser.parse('2015-12-28 00:00:00+01:00')
dt1.isocalendar()
=> (2015, 53, 1) # (year, week number, week day)
datetime.strptime('2015 53 1', '%Y %W %w')
=> datetime.datetime(2016, 1, 4, 0, 0)
# Should return datetime.datetime(2015, 12, 28, 0, 0)
怎么了?
这里的事情是,当你给
from datetime import datetime
print(datetime.strptime('2015 52 1', '%Y %W %w'))
o/p : 2015-12-28 00:00:00
你会得到以上的日子。
%W The week number of the year (Monday as the first day of the week) as a decimal number [00,53]; leading zeros are permitted but not required.
这需要从星期一开始的第一天。
当你尝试这个时
from datetime import datetime
print(datetime.strptime('2015 1 1', '%Y %W %w'))
它会说 2015-01-05 00:00:00
。所以,当我们来到 2015 年的第 53 周时。strptime 函数采用 2016 年的第一个星期一。所以你得到 4-01-2016。
更新:
当你尝试这个时
from datetime import datetime
print(datetime.strptime('2015 52 1', '%Y %W %w'))
o/p : 2015-12-28 00:00:00
这是 2015 年的最后一周。
from datetime import datetime
print(datetime.strptime('2015 53 1', '%Y %W %w'))
print(datetime.strptime('2016 1 1', '%Y %W %w'))
这两个会给你相同的结果。
strptime %W
使用常规日历周。 ISO week date 与常规日历不同。年准确地分为 52 或 53 周(364 或 371 天)。
目前 python 的 strptime 不支持 iso 周日期,但计划用于 python 3.6。然后你可以使用 %G %V %w
(我认为)来解析 iso 周日期。 http://bugs.python.org/issue12006
在那之前,您可以使用 isoweek 包来解析 iso 周日期。 https://pypi.python.org/pypi/isoweek/