Python 3 将 ISO 8601 转换为毫秒

Python 3 Convert ISO 8601 to milliseconds

我从 API GET 请求(“2020-02-25T00:02:43.000Z”)接收到 ISO 8601 格式。我正在尝试将其转换为毫秒,因为 API POST 调用的有效负载需要该格式。我已经成功 运行 来自 Linux 系统的代码,但我从 Windows.

得到 ValueError: Invalid format string

来自 Linux:

import dateutil.parser

time = "2020-02-25T00:02:43.000Z"
parsed_time = dateutil.parser.parse(time)
t_in_millisec = parsed_time.strftime('%s%f')
t_in_millisec[:-3]

returns

'1582588963000'

来自 Windows:

import dateutil.parser

      1 time = "2020-02-25T00:02:43.000Z"
      2 parsed_time = dateutil.parser.parse(time)
----> 3 t_in_millisec = parsed_time.strftime('%s%f')

ValueError: Invalid format string

有解决办法吗?

这在 Windows 中不起作用的原因是 strftime 函数调用本机 OS 的 C 库,并且 Unix 滴答作响(即自 1970 年 1 月 1 日午夜以来的秒数)不是 Windows 操作系统的一部分。

如果您想获得自 1970 年 1 月 1 日以来的秒数,那么您可以简单地减去原始日期并从 timedelta 中获得总秒数。 Python 使这更容易,并提供了一个时间戳函数来为您进行计算(并将亚秒作为小数部分)。

import dateutil.parser

time = "2020-02-25T00:02:43.000Z"
parsed_time = dateutil.parser.parse(time)
timestamp = parsed_time.timestamp() * 1000
return str(int(timestamp))

这是在 windows 上起作用的列表,实际上 %s 不存在。 https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strftime-wcsftime-strftime-l-wcsftime-l?redirectedfrom=MSDN&view=vs-2019

我一直用datetime,如果你有机会用这里是一个例子:

datetime.datetime(2020,2,25,0,2,43).timestamp()

import datetime
time = "2020-02-25T00:02:43.000Z"
date = datetime.datetime.strptime(time, '%Y-%m-%dT%H:%M:%S.%fZ')
timestamp = str((date - datetime.datetime(1970, 1, 1)).total_seconds()*1000)
print(timestamp[:-2])