我遇到了一个让我烦恼的简单错误。我以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
。为什么这会以这种方式出现?
答案 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个应该是一个红旗。