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

时间:2009-05-25 00:11:49

标签: python padding strftime

使用Python strftime时,有没有办法删除日期的前0,如果它在10日之前,即。所以011?找不到%的东西?

谢谢!

19 个答案:

答案 0 :(得分:483)

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

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

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

答案 1 :(得分:176)

自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开始,这可以表示为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'

答案 2 :(得分:35)

根据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'

答案 3 :(得分:26)

>>> import datetime
>>> d = datetime.datetime.now()
>>> d.strftime('X%d/X%m/%Y').replace('X0','X').replace('X','')
'5/5/2011'

答案 4 :(得分:20)

Here是GNU C库中strftime()支持的修饰符的文档。 (就像之前人们说的那样,它可能不是便携式的。)您可能会感兴趣:

  • %e而不是%d将使用空格替换月中的前导零

它适用于我的Python(在Linux上)。我不知道它是否适用于你的。

答案 5 :(得分:15)

参加派对的时间已经很晚,但%-d在我的最后工作。

datetime.now().strftime('%B %-d, %Y')会产生类似" 2014年11月5日"

的内容 欢呼:)

答案 6 :(得分:15)

在Windows上,添加'#',如'%#m /%#d /%Y%#I:%M:%S%p'

供参考:https://msdn.microsoft.com/en-us/library/fe06s4ak.aspx

答案 7 :(得分:10)

我发现Django模板日期格式过滤器快速简便。它剥离了前导零。如果您不介意导入Django模块,请查看它。

http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date

from django.template.defaultfilters import date as django_date_filter
print django_date_filter(mydate, 'P, D M j, Y')    

答案 8 :(得分:4)

看看-吼叫:

>>> 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)

答案 9 :(得分:3)

只需像这样使用replace

(datetime.date.now()).strftime("%Y/%m/%d").replace("/0", "/")

它会输出:

'2017/7/21'

答案 10 :(得分:2)

对于%d,您可以使用int()转换为整数,然后它会自动删除前导0并变为整数。然后,您可以使用str()转换回字符串。

答案 11 :(得分:2)

基于Alex的方法,这将适用于字符串开头和后空格情况:

re.sub('^0|(?<= )0', '', "01 January 2000 08:00am")

我比.format或%-d更喜欢这个,因为这是跨平台的,并允许我继续使用strftime(以获得“11月”和“星期一”)。

答案 12 :(得分:1)

因为Python实际上只是在您的平台上调用C语言strftime(3)函数,所以可能存在可用于控制前导零的格式字符;试试man strftime然后看一看。但是,当然,结果将不可移植,因为Python手册会提醒您。 : - )

我会尝试使用新式datetime对象,其中包含t.yeart.month以及t.day等属性,并将这些属性置于正常,高位 - %运算符的动力格式化,它支持对前导零的控制。有关详细信息,请参阅http://docs.python.org/library/datetime.html。更好的是,如果您的Python拥有它并且更加现代化,请使用"".format()运算符;它还有很多数字格式选项。请参阅:http://docs.python.org/library/string.html#string-formatting

答案 13 :(得分:1)

import datetime
now = datetime.datetime.now()
print now.strftime("%b %_d")

答案 14 :(得分:1)

老问题,但是%l(小写L)在strftime中为我工作:但是,这可能对每个人都不起作用,因为它没有在我发现的Python文档中列出

答案 15 :(得分:0)

使用,例如,&#34;% - d&#34;即使在相同操作系统的不同版本之间也不可移植。 更好的解决方案是单独提取日期组件,并在每个组件的日期特定格式操作符和日期属性访问之间进行选择。

e = datetime.date(2014, 1, 6)
"{date:%A} {date.day} {date:%B}{date.year}".format(date=e)

答案 16 :(得分:0)

%d在Python 3.6.5(以及希望在以后的版本中)中都支持(前导零和不使用前导零)

enter image description here

答案 17 :(得分:0)

Python 3.6 +:

from datetime import date
today = date.today()
text = "Today it is " + today.strftime(f"%A %B {today.day}, %Y")

答案 18 :(得分:0)

我来晚了,但是一个简单的列表切片就可以完成工作

CentOS-8.2 with - 4.18.0-193.28.1.el8_2.x86_64