两台不同的计算机(相同的 python 版本)为 time.ctime()
返回不同的格式。一个返回
"Sun May 6 14:04:28 2018"
月份前有2个空格;其他返回
"Sun May 06 14:04:28 2018"
带有一个空格和一个零。我觉得它是由操作系统或 C lib 决定的。有谁知道这取决于什么?
P.S.:我知道如何在代码中修复它,我正在寻找这种行为的根本原因。
最佳答案
https://github.com/python/cpython/blob/master/Modules/timemodule.c包含相关代码:
static PyObject *
_asctime(struct tm *timeptr)
{
…
return PyUnicode_FromFormat("%s %s%3d %.2d:%.2d:%.2d %d", …
简而言之:上述版本的 Python 在月份后面生成一个三个字符的数字,没有任何零。所以它是 Dec 9
或 Dec 10
。
我找不到不同的版本,但您使用的某个版本可能会执行类似 "%s %s %02d...
的操作,放置一个明确的空格和两个-数字日。
更新:通过返回“责备链”,我可以找到 https://github.com/python/cpython/blame/2427ab9d6f132224d6ee4a2b7f00b9d69ba6c0a3/Modules/timemodule.c这确实调用了 libc asctime()
函数。到那时,该功能确实依赖于操作系统。
可以在 https://github.com/python/cpython/commit/b9588b528a48302a4884d0500caec71f1c59280c 下找到相关的变更集2011 年 1 月 4 日,据我了解标签,已向后移植到 v2.7.4。如果您的版本比那个版本旧,那就说明了一些事情。
关于Python time.ctime() 格式 : 0-padding or space-padding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53709244/