Python strftime - 去掉日期前导零?
在使用Python的strftime
时,有没有办法去掉日期前面的0呢?比如说,如果日期是10号之前的,像01
就变成1
?我找不到相关的%
格式符来处理这个问题。
谢谢!
22 个回答
47
有些平台可能支持在%
和字母(比如表示月份的'd')之间指定宽度和精度,具体可以参考http://docs.python.org/library/time.html -- 但这肯定不是一个通用的解决方案(例如,在我的Mac上就不行;-)。也许你可以在strftime
之后使用字符串替换(或者正则表达式,如果格式特别复杂的话)来解决这个问题?比如:
>>> 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'
215
自从Python 2.6版本开始,我们就可以用format
这个方法来做一些这样的事情:
>>> 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'
而从Python 3.6开始,我们可以用一种叫做内联格式化字符串的方式来表达:
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'
818
其实我也遇到过同样的问题,我发现如果在%
和字母之间加一个连字符(-),就可以去掉前面的零。
比如说%Y/%-m/%-d
:
>>> import datetime
>>> datetime.datetime(2023, 1, 2).strftime("%Y/%-m/%-d")
'2023/1/2'
这个方法只在Unix系统上有效(比如Linux和OS X),在Windows系统上(包括Cygwin)就不行了。在Windows上,你需要用#
,比如说%Y/%#m/%#d
。