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

Sol*_*ull 236 python padding strftime

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

谢谢!

小智 511

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

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

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

  • 适用于Linux,这通常足够好. (28认同)
  • 为什么这不适用于Windows,而是适用于Linux? (18认同)
  • 它在OS X上对我有用,但我正在使用python.org的Python 2.7.2. (14认同)
  • @moose我问了一个关于这个的问题:-)这里是答案 - > http://stackoverflow.com/questions/28894172/why-does-d-or-e-remove-the-leading-space-or-zero (12认同)
  • 甚至不适合我,给出一个ValueError(windows,python 2.6) (11认同)
  • 我得到'ValueError:' - '格式为'%b%-d,%Y'的错误指令.OSX,Python 2.7. (7认同)
  • `%#d`在Windows上也会这样做 (6认同)
  • 在alpine(Linux)上不起作用,请小心,因为它将生成空字符串而没有任何期望! (2认同)
  • #不适用于Win 10.0.17134 N / A版本17134 + python 3.6.0`ValueError:'#'是格式为'%a'的错误指令。%#d%B%Y,%H:%M'` (2认同)

mgi*_*son 184

format自python2.6以来,我们可以通过方法的出现来做这种事情:

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

虽然可能超出原始问题的范围,但对于更有趣的格式,您可以执行以下操作:

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

从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'
Run Code Online (Sandbox Code Playgroud)

  • 适用于所有平台,这始终是一个很好的方法. (2认同)
  • 非常好!不幸的是,如果你想使用像'time.strftime('%A%B%d,%Y')`这样的文本表示,它会产生(现在,在英语语言环境中)`2014年10月7日星期二`. (2认同)
  • 一个问题是''​​{dt.hour}'`使用24小时制:(.使用第二个选项仍然会让你回到在Windows上使用''{%#I}'`和`'{%-I} ''在Unix上. (2认同)

Ale*_*lli 37

%根据http://docs.python.org/library/time.html,某些平台可能支持字母之间的宽度和精度规格(例如"d"代表日期)- 但它绝对是非便携式的解决方案(例如在我的Mac上不起作用;-).也许你可以使用字符串替换(或RE,对于真正令人讨厌的格式)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'
Run Code Online (Sandbox Code Playgroud)

  • @User以上代码检查0之前的空格,如果"2000年1月1日"不存在. (5认同)

gdw*_*dw2 26

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

  • 这是 hack,但它是一个 pythonic hack。 (3认同)
  • @MarcoBonelli:试试你对字符串“X12/X12/14”的建议,你会看到。 (2认同)

new*_*cct 22

以下strftime()GNU C库支持的修饰符的文档.(就像之前的人说的,它可能不便携.)您可能会感兴趣:

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

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

  • 在Windows w/Python 2.6上,%e对我失败了.我猜它是*nix具体的.太糟糕了 :( (3认同)
  • 这对我在 Windows 7 SP1 和 Python 3.5.1 上有效。 (3认同)

Cha*_*edy 17

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

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


bon*_*ges 15

聚会很晚,但%-d我的工作结束了.

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

欢呼:)

  • 领先答案的重复?/sf/answers/145123261/ (5认同)
  • `ValueError: Invalid format string` 在我的 Windows 系统中。 (2认同)
  • 正如[主要答案](/sf/answers/145123261/)中所述,使用`-`“*仅适用于Unix(Linux,OS X),不适用于Windows(包括Cygwin)。在Windows上,你会使用#*” (2认同)

mcq*_*rty 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')    
Run Code Online (Sandbox Code Playgroud)


小智 7

看一下-波纹管:

>>> 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)
Run Code Online (Sandbox Code Playgroud)

  • “这应该是公认的答案”。不,不应该,因为这只适用于 Linux。 (5认同)

Moh*_*nia 7

只需replace像这样使用:

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

它会输出:

'2017/7/21'
Run Code Online (Sandbox Code Playgroud)


小智 5

因为%d您可以使用int()它转换为整数,然后它会自动删除前导 0 并变为整数。然后,您可以使用str().

  • OP 问题是针对在调用 strftime 时使用格式说明符的解决方案,而不是涉及 str() 的自行解决方案 (3认同)