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

3

两台不同的电脑(使用相同的Python版本)对于time.ctime()的格式化返回结果不同。其中一台电脑返回:

"Sun May  6 14:04:28 2018"

一个在月份前有2个空格的格式;另一个返回

"Sun May 06 14:04:28 2018"

有一个空格和一个零。我感觉它是由操作系统或C库决定的。有人知道这取决于什么吗?

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


我确定它们都是2.7.13版本。 - Katya Denef
是的,适用于win 8和win server 2012。但另一个server 12返回的格式与我的server 2012不同。 - Katya Denef
我会尝试重新安装Python。实际上,我还没有在第二个服务器上运行sys版本,我会检查一下。谢谢。 - Katya Denef
@KatyaDenef 那应该会有什么不同吗? - glglgl
1个回答

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

我找不到不同的版本,但你使用的版本之一可能会执行类似于"%s %s %02d…的操作,将一个显式空格和两位数的日期放在一起。

更新:通过追溯“责任链”,我找到了https://github.com/python/cpython/blame/2427ab9d6f132224d6ee4a2b7f00b9d69ba6c0a3/Modules/timemodule.c,它确实调用了libc库的asctime()函数。在此之前,该函数确实依赖于操作系统。

相关的变更集可以在2011年1月4日的https://github.com/python/cpython/commit/b9588b528a48302a4884d0500caec71f1c59280c下找到,根据我理解的标签,它已经被回溯到v2.7.4。如果您的版本比这个旧,那就说明了一些问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接