是否有一种打印 Python 日期时间的格式,它不会在日期和时间上使用零填充?
我现在使用的格式:
mydatetime.strftime('%m/%d/%Y %I:%M%p')
结果: 2012 年 2 月 29 日下午5:03
期望: 2012 年 2 月 29 日下午5:03
什么格式将月份表示为“2”而不是“02”,时间表示为“5:03PM”而不是“05:03PM”
是否有一种打印 Python 日期时间的格式,它不会在日期和时间上使用零填充?
我现在使用的格式:
mydatetime.strftime('%m/%d/%Y %I:%M%p')
结果: 2012 年 2 月 29 日下午5:03
期望: 2012 年 2 月 29 日下午5:03
什么格式将月份表示为“2”而不是“02”,时间表示为“5:03PM”而不是“05:03PM”
另一个避免上述“全有或全无”前导零方面的替代方法是在字段类型前放置一个减号:
mydatetime.strftime('%-m/%d/%Y %-I:%M%p')
然后这个:'4/10/2015 03:00AM'
变为:“2015 年 4 月 10 日凌晨 3:00”
如果需要,您可以选择在日期前加上减号。
编辑:减号功能源自 GNU C 库(“glibc”),如Linux strftime手册页“Glibc 注释”下所述</p>
新的字符串格式化系统提供了strftime
. 它非常易读——事实上,它可能比strftime
那个帐户更可取。更不用说它没有零填充的事实:
>>> '{d.month}/{d.day}/{d.year}'.format(d=datetime.datetime.now())
'3/1/2012'
由于您可能希望在分钟字段中填充零,您可以这样做:
>>> '{d.month}/{d.day}/{d.year} {d.hour}:{d.minute:02}'.format(d=now)
'3/1/2012 20:00'
如果您想要“常规”时间而不是“军用”时间,您仍然可以使用标准strftime
说明符。方便地,出于我们的目的,strftime
确实提供了 12 小时时间的代码,用空格而不是前导零填充:
'{d.month}/{d.day}/{d.year} {d:%l}:{d.minute:02}{d:%p}'.format(d=now)
'4/4/2014 6:00PM'
唉,这变得有点不可读。正如@mlissner 指出的那样,strftime
1900 年之前的日期在某些(所有?)平台上会失败。
可用的格式选项datetime.strftime()
将全部为零填充。您当然可以滚动您自己的格式化功能,但在这种情况下,最简单的解决方案可能是对以下结果进行后处理datetime.strftime()
:
s = mydatetime.strftime('%m/%d/%Y %I:%M%p').lstrip("0").replace(" 0", " ")
接受的答案不是正确的解决方案(恕我直言)正确的记录方法:
在 Linux 中,“#”被替换为“-”:
%-d, %-H, %-I, %-j, %-m, %-M, %-S, %-U, %-w, %-W, %-y, %-Y
在 Windows 中,“-”替换为“#”:
%#d, %#H, %#I, %#j, %#m, %#M, %#S, %#U, %#w, %#W, %#y, %#Y
#Linux
mydatetime.strftime('%-m/%d/%Y %-I:%M%p')
# Windows
mydatetime.strftime('%#m/%d/%Y %#I:%M%p')
来源:https ://msdn.microsoft.com/en-us/library/fe06s4ak.aspx
正如 Sagneta 所说:Windows 上的 # 哈希技巧仅适用于本机 python 可执行文件。这不适用于基于 cygwin 的 python 实现。
Chris Freeman 在 Linux 上的回答很好。
在 Windows 上,它是:
mydate.strftime('%#m/%#d/%Y')
认为这可能会有所帮助。
“%l”(这是一个小写的 L)工作一小时(而不是“%I”)。我只从这里的另一个答案中知道这一点
但不幸的是,他们没有日期/时间的其他元素的代码。
我用这个:
D = str(datetime.now().day)
MM = str(datetime.now().month)
YYYY = str(datetime.now().year)
今天,这将回归:2021 年 2 月 12 日