为什么"%-d"或"%-e"会删除前导空格或零?

Mat*_*ias 20 python datetime strftime python-2.7

在问题904928(Python strftime - 没有领先0的日期?) Ryan回答:

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

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

我遇到了同样的问题,这是一个很好的解决方案,但是,为什么这样做呢?

>>> import datetime
>>> datetime.datetime(2015, 3, 5).strftime('%d')
'05'

>>> datetime.datetime(2015, 3, 5).strftime('%-d')
'5'

# It also works with a leading space
>>> datetime.datetime(2015, 3, 5).strftime('%e')
' 5'

>>> datetime.datetime(2015, 3, 5).strftime('%-e')
'5'

# Of course other numbers doesn't get stripped
>>> datetime.datetime(2015, 3, 15).strftime('%-e')
'15'
Run Code Online (Sandbox Code Playgroud)

我找不到任何关于这方面的文件?- > python datetime docs/python string operations

看起来这在Windows机器上不起作用,我不使用Windows,但知道它为什么不起作用会很有趣?

jfs*_*jfs 27

Python datetime.strftime()委托给strftime()依赖于平台的C 函数:

支持的全套格式代码因平台而异,因为Python调用平台C库的strftime()函数,并且平台变体很常见.要查看平台支持的完整格式代码集,请参阅strftime(3)文档.

Glibc注意到strftime(3):

- (破折号)不要填充数字结果字符串.

我的Ubuntu机器上的结果:

>>> from datetime import datetime
>>> datetime.now().strftime('%d')
'07'
>>> datetime.now().strftime('%-d')
'7'
Run Code Online (Sandbox Code Playgroud)

  • 在Windows上使用“#”代替“-”的注释可能对将来的读者有所帮助。 (3认同)