两台不同的电脑(使用相同的Python版本)对于time.ctime()
的格式化返回结果不同。其中一台电脑返回:
"Sun May 6 14:04:28 2018"
一个在月份前有2个空格的格式;另一个返回
"Sun May 06 14:04:28 2018"
有一个空格和一个零。我感觉它是由操作系统或C库决定的。有人知道这取决于什么吗?
P.S .:我知道如何在代码中解决它,我正在寻找这种行为的根本原因。
两台不同的电脑(使用相同的Python版本)对于time.ctime()
的格式化返回结果不同。其中一台电脑返回:
"Sun May 6 14:04:28 2018"
一个在月份前有2个空格的格式;另一个返回
"Sun May 06 14:04:28 2018"
有一个空格和一个零。我感觉它是由操作系统或C库决定的。有人知道这取决于什么吗?
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()
函数。在此之前,该函数确实依赖于操作系统。