有没有一种打印Python日期时间的格式,该格式不会在日期和时间上使用零填充?
我现在使用的格式:
mydatetime.strftime('%m/%d/%Y %I:%M%p')
结果: 2012年2月29日下午5:03
所需: 2012年2月29日下午5:03
什么格式将月份表示为“ 2”而不是“ 02”,将时间表示为“ 5:03 PM”而不是“ 05:03 PM”
Answers:
可用的格式化选项datetime.strftime()
将全部为零填充。您当然可以滚动使用自己的格式化功能,但是在这种情况下,最简单的解决方案可能是对以下结果进行后处理datetime.strftime()
:
s = mydatetime.strftime('%m/%d/%Y %I:%M%p').lstrip("0").replace(" 0", " ")
.lstrip("0")
可以摆脱前导零的原因。
避免上述“全有或全无”的前导零表示的另一种替代方法是在字段类型前面放置一个减号:
mydatetime.strftime('%-m/%d/%Y %-I:%M%p')
然后这样:“ 4/10/2015 03:00 AM”
变为:“ 4/10/2015 3:00 AM”
如果需要,您可以选择在当天的前面放置一个减号。
编辑:减号功能源自GNU C库(“ glibc”),如Linux strftime联机帮助页“ Glibc注释”下所述。
date.__format__
或time.strftime
,docs.python.org/3/library/...和docs.python.org/3.8/library/time.html#time.strftime分别
新的字符串格式系统提供了的替代方法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'
becomes,这变得有点难以理解。正如@mlissner所指出的那样,strftime
在某些(所有?)平台上,1900年之前的日期将失败。
"{0.day} {0:%B %Y}".format(d)
将其'2 August 2013'
作为评论的日期:)
接受的答案不是适当的解决方案(IMHO)正确记录的方法:
在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实现。