在使用Python的strftime
时,是否有一种方法可以去除日期前面的0(如果日期在10日之前),例如,将01
变为1
?找不到对应的%
占位符来完成这个操作。
谢谢!
%
)和字母之间加一个连字符,就可以去掉前导零。%Y/%-m/%-d
。>>> import datetime
>>> datetime.datetime(2023, 1, 2).strftime("%Y/%-m/%-d")
'2023/1/2'
#
,例如%Y/%#m/%#d
。自从Python2.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'
从Python3.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'
time.strftime('%A %B %d, %Y')
,它不能单独使用,这将产生(在英语环境下)Tuesday October 07, 2014
的结果。 - Pekka Klärck__format__
钩子,允许你编写类似那样的东西。 - mgilson'{dt.hour}'
使用的是24小时制钟表 :(. 使用第二个选项仍然需要在Windows上使用'{%#I}'
,在Unix上使用'{%-I}'
。 - ubomb一些平台可能支持在 %
和字母(比如 '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'
这里是GNU C库中strftime()
支持的修饰符的文档(就像之前有人说的,可能不可移植)。你可能感兴趣的是:
%e
代替%d
,将月份中的前导零替换为空格与Python文档中的strftime()格式代码
进行比较。文档中记录了%d
:
%d
:月份中的日期,以零填充的十进制数。 示例:01、02、…、31
但是%e
没有记录。尽管没有记录,但在我的环境下(运行Linux),它似乎仍然有效:
>>> import datetime
>>> datetime.datetime(2023, 1, 1).strftime("%e")
' 1'
%-d
一样,这在使用 Python 2.7.2 的 OS X 10.8.5 中可以工作,但在使用 Python 2.7.3 的 Windows 7 Pro 64 位中不行。 - Johan>>> import datetime
>>> d = datetime.datetime.now()
>>> d.strftime('X%d/X%m/%Y').replace('X0','X').replace('X','')
'5/5/2011'
.replace('X0','X').replace('X','')
有什么意义呢?只需做 .replace('X0', '')
就可以了。 - Marco Bonelli虽然有些晚了,但是%-d
在我的机器上可以工作。
datetime.now().strftime('%B %-d, %Y')
会生成类似于"November 5, 2014"的东西。
干杯 :)
ValueError: Invalid format string
错误。 - Deqing请看下面的-
:
>>> from datetime import datetime
>>> datetime.now().strftime('%d-%b-%Y')
>>> '08-Oct-2011'
>>> datetime.now().strftime('%-d-%b-%Y')
>>> '8-Oct-2011'
>>> today = datetime.date.today()
>>> today.strftime('%d-%b-%Y')
>>> print(today)
from django.template.defaultfilters import date as django_date_filter
print django_date_filter(mydate, 'P, D M j, Y')
import django.conf``django.conf.settings.configure()
。 - Alex Pretzlav只需要像这样使用replace
:
(datetime.date.now()).strftime("%Y/%m/%d").replace("/0", "/")
它会输出:
'2017/7/21'
ValueError: '-' is a bad directive in format '%b %-d, %Y'
çڑ„错误م€‚è؟™وک¯هœ¨OSXن¸ٹن½؟用Python 2.7و—¶ه‡؛çژ°çڑ„م€‚ - Richard%#d
在 Windows 上也会有同样的作用。 - dalle