【问题标题】:Python time.ctime() format: 0-padding or space-paddingPython time.ctime() 格式:0-padding 或 space-padding
【发布时间】:2019-05-11 13:32:32
【问题描述】:

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

"Sun May  6 14:04:28 2018"

月份前有 2 个空格;其他返回

"Sun May 06 14:04:28 2018"

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

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

【问题讨论】:

  • 我很肯定他们都是 2.7.13
  • 是的。 win 8 和 win server 2012。但另一台服务器 12 也返回了与我的服务器 2012 不同的格式。
  • 我会尝试重新安装 python,实际上。我还没有在第二台服务器上运行 sys 版本,将检查它。谢谢。
  • @KatyaDenef 这应该有什么不同?

标签: python python-2.7 time formatting ctime


【解决方案1】:

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-01-04 的 https://github.com/python/cpython/commit/b9588b528a48302a4884d0500caec71f1c59280c 下找到相关的变更集,据我了解这些标签,已向后移植到 v2.7.4。如果您的版本比这更旧,那就说明了一些事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-01
    • 2011-03-21
    • 2021-08-19
    • 2020-09-21
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多