Python time.ctime()格式:0填充或空格填充

时间:2018-12-10 15:57:14

标签: python python-2.7 time formatting ctime

两台不同的计算机(相同的python版本)为time.ctime()返回不同的格式。一回

"Sun May  6 14:04:28 2018"

一个月的前一天有2个空格;其他回报

"Sun May 06 14:04:28 2018"

,带空格和零。我觉得它是由OS还是由C lib决定的。有人知道这取决于什么吗?

P.S .:我知道如何在代码中修复它,我正在寻找这种行为的根本原因。

1 个答案:

答案 0 :(得分:2)

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 9Dec 10

我无法找到一个不同的版本,但是您使用的其中一个版本可能会执行类似"%s %s %02d…的操作,并放置一个明确的空格和两位数的日期。

更新:通过返回“怪胎链”,我可以找到确实调用libc asctime()函数的https://github.com/python/cpython/blame/2427ab9d6f132224d6ee4a2b7f00b9d69ba6c0a3/Modules/timemodule.c。直到那时,该功能确实取决于操作系统。

可以在2011年1月4日的https://github.com/python/cpython/commit/b9588b528a48302a4884d0500caec71f1c59280c下获得相关的变更集,据我所知,这些标签已移植到v2.7.4。如果您的版本早于该版本,那可以解释一些问题。