datetime.datetime.strptime()。date()将日期转换为错误的月份

时间:2017-06-09 19:02:59

标签: python date datetime

我遇到了一个让我烦恼的简单错误。我以date格式传递string,然后使用date将其转换为datetime。这是我的代码:

import datetime
def room(book_date):
    date_converted = datetime.datetime.strptime(book_date, '%Y-%M-%d').date()

    print(date_converted)


if __name__ == '__main__':

    room('2018-08-07') 

print语句打印2018-01-07,而它应为2018-08-07。无论我过去的那个日期总是01。为什么这会以这种方式出现?

1 个答案:

答案 0 :(得分:5)

%M分钟的代码,而不是本月的代码。使用%m,小写:

date_converted = datetime.datetime.strptime(book_date, '%Y-%m-%d').date()

因为您没有解析出一个月,所以默认使用(1900年1月1日午夜为1)。

演示:

>>> book_date = '2018-08-07'
>>> datetime.datetime.strptime(book_date, '%Y-%m-%d')
datetime.datetime(2018, 8, 7, 0, 0)
>>> datetime.datetime.strptime(book_date, '%Y-%m-%d').date()
datetime.date(2018, 8, 7)
>>> print(_)
2018-08-07

如果您不专注于日期,则可能更容易发现错误:

>>> datetime.datetime.strptime(book_date, '%Y-%M-%d')
datetime.datetime(2018, 1, 7, 0, 8)

分钟位置的8个应该是一个红旗。