【问题标题】:Python 3 Convert ISO 8601 to millisecondsPython 3 将 ISO 8601 转换为毫秒
【发布时间】:2020-02-27 22:13:28
【问题描述】:

我从 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]

返回

'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

有没有办法解决这个问题?

【问题讨论】:

    标签: python-3.x python-dateutil


    【解决方案1】:

    这是在 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])
    

    【讨论】:

      【解决方案2】:

      这在 Windows 中不起作用的原因是 strftime 函数调用本机操作系统的 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))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-31
        • 1970-01-01
        • 2015-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-07
        相关资源
        最近更新 更多