是否有打印Python日期时间的格式,不会在日期和时间使用零填充?
我现在正在使用的格式:
mydatetime.strftime('%m/%d/%Y %I:%M%p')
结果: 02/29/2012 05:03 PM
渴望: 2/29/2012 5:03 PM
什么格式将月份表示为'2'而不是'02',时间表示为'5:03 PM'而不是'05:03PM'
答案 0 :(得分:88)
另一个避免上述“全部或全部”前导零方面的替代方法是在字段类型前面放置一个减号:
mydatetime.strftime('%-m/%d/%Y %-I:%M%p')
然后:'2015年4月10日03:00'
成为:'2015年4月10日凌晨3:00'
如果需要,您可以选择在当天前面添加减号。
答案 1 :(得分:83)
新的字符串格式系统提供了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年之前的某些(所有?)平台上失败。
答案 2 :(得分:49)
datetime.strftime()
可用的格式选项将全部置零。您当然可以使用自己的格式化功能,但在这种情况下最简单的解决方案可能是对datetime.strftime()
的结果进行后处理:
s = mydatetime.strftime('%m/%d/%Y %I:%M%p').lstrip("0").replace(" 0", " ")
(也就是说,如果你认为这样做确实值得麻烦。为什么不简单地留下零?)
答案 3 :(得分:28)
接受的答案不是正确的解决方案(恕我直言)正确的记录方法:
在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上的#hake技巧仅适用于本机python可执行文件。这对基于cygwin的python实现不起作用。
答案 4 :(得分:5)
Chris Freeman在Linux上的答案很好。
在Windows上,它是:
mydate.strftime('%#m/%#d/%Y')
可能有所帮助。
答案 5 :(得分:0)
“%l”(小写L)在小时内工作(而不是“%I”)。我只是 从这里的另一个答案知道这一点
Python strftime - date without leading 0?
但不幸的是,他们没有日期/时间其他元素的代码。