126

是否有一种打印 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”

4

7 回答 7

239

另一个避免上述“全有或全无”前导零方面的替代方法是在字段类型前放置一个减号:

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>

于 2015-05-01T01:32:42.397 回答
107

新的字符串格式化系统提供了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 指出的那样,strftime1900 年之前的日期在某些(所有?)平台上会失败。

于 2012-03-02T00:00:10.227 回答
90

可用的格式选项datetime.strftime()将全部为零填充。您当然可以滚动您自己的格式化功能,但在这种情况下,最简单的解决方案可能是对以下结果进行后处理datetime.strftime()

s = mydatetime.strftime('%m/%d/%Y %I:%M%p').lstrip("0").replace(" 0", " ")
于 2012-03-01T23:46:19.130 回答
68

接受的答案不是正确的解决方案(恕我直言)正确的记录方法:

在 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 实现。

于 2017-03-10T03:22:23.733 回答
18

Chris Freeman 在 Linux 上的回答很好。

在 Windows 上,它是:

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

认为这可能会有所帮助。

于 2016-11-01T17:17:49.447 回答
0

“%l”(这是一个小写的 L)工作一小时(而不是“%I”)。我只从这里的另一个答案中知道这一点

Python strftime - 没有前导0的日期?

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

于 2020-07-11T23:37:22.910 回答
0

我用这个:

D = str(datetime.now().day)
MM = str(datetime.now().month)
YYYY = str(datetime.now().year)

今天,这将回归:2021 年 2 月 12 日

于 2021-12-02T11:33:01.720 回答