使用datetime的strftime与strptime时格式不符问题咨询
问题分析与解决办法
首先得澄清一个关键误解:strptime()的作用是把字符串解析成datetime对象,而非用来格式化输出。你看到的2018-05-09 00:00:00其实是datetime对象的默认字符串表示,并不是strptime的“错误输出”哦。
你当前代码的问题拆解:
- 第一行
Date = datetime.datetime.today().strftime("%d %B %Y")生成的是带补零日期的字符串,比如"09 May 2018"(%d表示补零的两位日期格式)。 - 第二行用
strptime把这个字符串转回datetime对象,当你打印这个对象时,Python会自动用它默认的%Y-%m-%d %H:%M:%S格式来显示,这就是你得到当前结果的原因。
正确获取无补零格式的方法:
想要直接得到9 May 2018这种无补零的日期字符串,完全不需要绕到strptime,直接在strftime里用对应指令就行——不过这个指令在不同操作系统上有差异:
- 在Unix/Linux/macOS系统,用
%-d表示无补零的日期:import datetime date_str = datetime.datetime.today().strftime("%-d %B %Y") print(date_str) # 输出:9 May 2018 - 在Windows系统,用
%#d表示无补零的日期:import datetime date_str = datetime.datetime.today().strftime("%#d %B %Y") print(date_str) # 输出:9 May 2018
如果已经有一个datetime对象,想要转成无补零格式,同样用strftime处理就行,比如:
now = datetime.datetime.today() formatted_date = now.strftime("%-d %B %Y") # Windows系统换成%#d print(formatted_date)
内容的提问来源于stack exchange,提问作者bloo
相关产品推荐
相关产品推荐

