Pythondate时间格式没有零填充

是否有打印Pythondate时间的格式,不会在date和时间使用零填充?

现在使用的格式:

mydatetime.strftime('%m/%d/%Y %I:%M%p') 

结果: 02/29/2012 05:03 PM
期望: 2012/2/29 5:03

什么格式将月份表示为“2”而不是“02”,时间为“5:03 PM”而不是“05:03PM”

datetime.strftime()可用的格式选项将全部为零。 你当然可以推出你自己的格式化函数,但在这种情况下最简单的解决scheme可能是后处理datetime.strftime()的结果:

 s = mydatetime.strftime('%m/%d/%Y %I:%M%p').lstrip("0").replace(" 0", " ") 

(也就是说,如果你决定这样做真的是值得的,为什么不简单地把零置入?)

新的string格式化系统提供了strftime的替代scheme。 这是相当可读的 – 事实上,这个帐户可能更适合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年以前的某些(所有)平台上将会失败。

另一种避免上面的“全部或全部”前导零方面的替代scheme是在字段types的前面放置一个负号:

 mydatetime.strftime('%-m/%d/%Y %-I:%M%p') 

那么这个:'4/10/2015 03:00 AM'

成为:'4/10/2015 3:00 AM'

如果需要,您可以select在一天之前放置一个减号。

接受的答案不是一个适当的解决scheme(恕我直言)正确的文件化的方法:

在Linux中,“#”被replace为“ – ”:

%-d,%-H,%-I,%-j,%-m,%-M,%-S,%-U,%-w,%-W,%-y,%-Y

在Windows中,“ – ”replace为“#”:

%#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上的#hash技巧只适用于本地python可执行文件。 这不适用于基于cygwin的python实现。

克里斯·弗里曼在Linux上的好答案。

在Windows上,它是:

 mydate.strftime('%#m/%#d/%Y') 

认为可能有帮助。