Python中如何实现Javascript的`Date.prototype.toISOString`?
在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")