我遇到了一个简单的错误,困扰着我。我以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 应该是一个危险信号。