Python strftime-不带前导0的日期?

2024-04-20 14:02:35 发布

您现在位置:Python中文网/ 问答频道 /正文

当使用Pythonstrftime时,如果日期的前0在第10个之前,是否有方法删除它,即011?找不到那种东西吗?

谢谢!


Tags: 方法pythonstrftime
3条回答

自从python2.6以来,随着^{}方法的出现,我们可以这样做:

>>> import datetime
>>> '{dt.year}/{dt.month}/{dt.day}'.format(dt = datetime.datetime.now())
'2013/4/19'

尽管可能超出了最初问题的范围,但对于更有趣的格式,您可以执行以下操作:

>>> '{dt:%A} {dt:%B} {dt.day}, {dt.year}'.format(dt=datetime.datetime.now())
'Wednesday December 3, 2014'

从python3.6开始,它可以表示为inline formatted string

Python 3.6.0a2 (v3.6.0a2:378893423552, Jun 13 2016, 14:44:21) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> dt = datetime.datetime.now()
>>> f'{dt:%A} {dt:%B} {dt.day}, {dt.year}'
'Monday August 29, 2016'

根据http://docs.python.org/library/time.html,有些平台可能支持%和字母之间的宽度和精度规范(例如,d代表一个月中的一天),但它绝对是一个不可移植的解决方案(例如,在我的Mac上不起作用)。也许您可以在strftime之后使用字符串替换(或者RE,对于真正讨厌的格式)来解决这个问题?e、 g.:

>>> y
(2009, 5, 7, 17, 17, 17, 3, 127, 1)
>>> time.strftime('%Y %m %d', y)
'2009 05 07'
>>> time.strftime('%Y %m %d', y).replace(' 0', ' ')
'2009 5 7'

实际上,我也遇到了同样的问题,我意识到,如果在%和字母之间添加一个连字符,就可以删除前导零。

例如%Y/%-m/%-d

这只适用于Unix(Linux,OS X),而不适用于Windows(包括Cygwin)。在Windows上,您可以使用#,例如%Y/%#m/%#d

相关问题 更多 >