为啥 "%-d" 或 "%-e" 删除前导空格或零?
Posted
技术标签:
【中文标题】为啥 "%-d" 或 "%-e" 删除前导空格或零?【英文标题】:Why does "%-d", or "%-e" remove the leading space or zero?为什么 "%-d" 或 "%-e" 删除前导空格或零? 【发布时间】:2015-05-07 18:51:25 【问题描述】:关于 SO 问题904928 (Python strftime - date without leading 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'
我找不到任何相关文档? -> python datetime docs / python string operations
这似乎在 windows 机器上不起作用,好吧,我不使用 windows,但知道它为什么不起作用会很有趣?
【问题讨论】:
在我的 Windows 版本中,只有您的第一个示例可以正常工作。其余的结果为ValueError: Invalid format string
。 This question 可能会在标准/便携式指令与特定于平台的“增强”方面对您有所了解。
所以这取决于每个操作系统的libc实现。谢谢!关于这些示例如何/为什么通常适用于 unix 系统的任何提示?
【参考方案1】:
Python datetime.strftime()
delegates to C strftime()
function that is platform-dependent:
支持的全套格式代码因平台而异, 因为 Python 调用了平台 C 库的 strftime() 函数,并且 平台变化很常见。查看完整的格式代码集 在您的平台上受支持,请参阅 strftime(3) 文档。
Glibc notes for strftime(3):
-(破折号)不要填充数字结果字符串。
我的 Ubuntu 机器上的结果:
>>> from datetime import datetime
>>> datetime.now().strftime('%d')
'07'
>>> datetime.now().strftime('%-d')
'7'
【讨论】:
如果您在 Linux 上工作,那就太好了。在 Windows 上工作时应该做什么? @NoctisSkytower 我想首先在 Windows 上不会有问题。如果它不支持时间格式的减号,那么就不会有“为什么减号删除任何东西”的问题。不支持——毫无疑问。 注意在 Windows 上使用#
而不是 -
可能对未来的读者有所帮助。
@NoctisSkytower 如果您认为它与当前问题相关,您可以发布自己的答案。以上是关于为啥 "%-d" 或 "%-e" 删除前导空格或零?的主要内容,如果未能解决你的问题,请参考以下文章
document.getElementById在JS方法外使用为啥获取空
为啥 IsNumeric("1.23D45") 返回 True?