什么是Javascript的'Date.prototype.toISOString`的Python等价物?

时间:2014-07-24 00:45:24

标签: python iso8601

在Javascript中,Date.prototype.toISOString提供ISO 8601 UTC日期时间字符串:

new Date().toISOString()
// "2014-07-24T00:19:37.439Z"

是否有一个Python函数的行为与Javascript'匹配?


尝试:

Python的datetime.datetime.isoformat类似,但不完全相同:

datetime.datetime.now().isoformat()
// '2014-07-24T00:19:37.439728'

使用pytz我至少可以使UTC明确:

pytz.utc.localize(datetime.now()).isoformat())
// '2014-07-24T00:19:37.439728+00:00'

6 个答案:

答案 0 :(得分:2)

您可以使用此代码:

import datetime
now = datetime.datetime.now()
iso_time = now.strftime("%Y-%m-%dT%H:%M:%SZ") 

答案 1 :(得分:2)

我试图将字符串格式化为javascript输出中的字符串。

from datetime import datetime

def iso_format(dt):
    try:
        utc = dt + dt.utcoffset()
    except TypeError as e:
        utc = dt
    isostring = datetime.strftime(utc, '%Y-%m-%dT%H:%M:%S.{0}Z')
    return isostring.format(int(round(utc.microsecond/1000.0)))

print iso_format(datetime.now())
#"2014-07-24T00:19:37.439Z"

答案 2 :(得分:0)

  

是否存在与Javascript匹配的行为的Python函数?

不在标准库中,但您可以自己构建。

答案 3 :(得分:0)

# Used dateutil package from https://pypi.org/project/python-dateutil/
import datetime
import dateutil.tz

def iso_format(dt):
    try:
        utc_dt = dt.astimezone(dateutil.tz.tzutc())
    except ValueError:
        utc_dt = dt
    ms = "{:.3f}".format(utc_dt.microsecond / 1000000.0)[2:5]
    return datetime.datetime.strftime(utc_dt, '%Y-%m-%dT%H:%M:%S.{0}Z'.format(ms))

答案 4 :(得分:0)

在Python 3.6+中使用f字符串

from datetime import datetime

f'{datetime.now():%Y-%m-%dT%H:%M:%SZ}'

答案 5 :(得分:0)

这是对我所做的,仅使用python的标准库即可:

from datetime import datetime, timezone

def isoformat_js(dt: datetime):
    return (
        dt.astimezone(timezone.utc)
        .isoformat(timespec="milliseconds")
        .replace("+00:00", "Z")
    )



isoformat_js(datetime(2014, 7, 24, 0, 19, 37, 439000))
# => '2014-07-24T00:19:37.439Z'