Python中如何实现Javascript的`Date.prototype.toISOString`?

9 投票
8 回答
8014 浏览
提问于 2025-04-18 14:32

在JavaScript中,Date.prototype.toISOString可以生成一个符合ISO 8601标准的UTC日期时间字符串:

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

那么,Python有没有类似的函数呢?


尝试过的:

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'

8 个回答

1

在编程中,有时候我们需要处理一些数据,这些数据可能来自不同的地方,比如用户输入、文件或者网络请求。为了让程序能够理解这些数据,我们通常需要将它们转换成一种特定的格式。

比如说,如果我们从一个网页上获取了一些信息,这些信息可能是以文本的形式存在的。为了让程序能够使用这些信息,我们需要把它们转化为程序能够理解的对象或变量。这个过程就叫做“解析”。

解析的过程就像是把一种语言翻译成另一种语言,让程序能够“听懂”我们给它的数据。这样,程序就可以根据这些数据做出相应的处理,比如显示在屏幕上、存储到数据库里,或者进行计算。

总之,解析就是将复杂的数据转换成简单易懂的格式,让程序能够顺利地使用这些数据。

# 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))
3

在Python 3.6及以上版本中使用f-字符串

from datetime import datetime

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

我试着把字符串格式化成和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"
5

这段代码对我来说很有效,我只是用了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'
7

你可以使用这段代码:

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

撰写回答