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



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

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.为什么会这样?

%M

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

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

由于您没有分析出一个月,因此使用默认值(1 表示 1900 年 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 应该是一个危险信号。

最新更新