没有零填充的Python日期时间格式

时间:2012-03-01 23:41:10

标签: python datetime formatting zero-pad

是否有打印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'

6 个答案:

答案 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?

但不幸的是,他们没有日期/时间其他元素的代码。