datetime:isoformat()中的强制微秒输出

时间:2013-07-13 12:55:43

标签: python datetime

我刚刚发布了一个关于Google云端硬盘日期格式的问题,我实际上找到了解决方案。从本质上讲,Google Drive文档指出它需要以RFC 3339格式指定日期。但是,它需要显式的全格式或长格式,即使毫秒为零。有没有办法强制datetime isoformat()方法输出毫秒,即使是零?我宁愿不使用strftime强制执行我自己的日期时间规范,但如果唯一的解决方案是使用以下strftime格式,那么就这样吧。

d.strftime("%Y-%m-%dT%H:%M:%S.%f+00:00")

2 个答案:

答案 0 :(得分:2)

这是datetime isoformat()的实现:

static char *
isoformat_time(PyDateTime_DateTime *dt, char buffer[], int bufflen)
{
    int x;
    int us = DATE_GET_MICROSECOND(dt);

    x = PyOS_snprintf(buffer, bufflen,
                      "%02d:%02d:%02d",
                      DATE_GET_HOUR(dt),
                      DATE_GET_MINUTE(dt),
                      DATE_GET_SECOND(dt));
    assert(bufflen >= x);
    if (us)
        x += PyOS_snprintf(buffer + x, bufflen - x, ".%06d", us);
    assert(bufflen >= x);
    return buffer + x;
}

看起来你不能做任何事情来强制输出字符串中的微秒。

答案 1 :(得分:1)

如果您使用的是 Python 3.6+,则可以将 timespec 参数传递给 isoformat()

该函数最终调用 _format_time,您可以在其中看到参数支持的值:

specs = {
    'hours': '{:02d}',
    'minutes': '{:02d}:{:02d}',
    'seconds': '{:02d}:{:02d}:{:02d}',
    'milliseconds': '{:02d}:{:02d}:{:02d}.{:03d}',
    'microseconds': '{:02d}:{:02d}:{:02d}.{:06d}'
}

即使特定部分为零,这也会强制渲染值