首页 > 解决方案 > 如何将提交的日期规范化为 UTC 格式 (2019-10-29T02:20:30.45Z) [这不是重复的问题,请阅读整个问题一次]

问题描述

我是 python 开发的新手。

当前我正在从 API 调用中提取日期,例如 = 10-29-2019 02:32 (mm-dd-yyyy %H,%M) 注意:我这里没有秒数,所以我想为秒

我希望将其标准化为 ISO 8601 UTC 格式 2019-10-29T02:20:30.45Z 。

我一直在尝试各种平台建议的多种方法,但我无法获得“45Z”部分。我知道 45 表示微秒。

这是我最接近的事情:

local = pytz.timezone ("Asia/Kolkata")
    datetime_without_tz = datetime.datetime.strptime("2015-02-14 12:34:56", "%Y-%m-%d %H:%M:%S")
    datetime_with_tz = local.localize(datetime_without_tz, is_dst=None) # No daylight saving time
    datetime_in_utc = datetime_with_tz.astimezone(pytz.utc)
    x=datetime_in_utc.strftime('%Y-%m-%d %H:%M:%S %Z')#if i print here 2019-10-28 21:02:00 UTC+0000
    print (datetime.datetime.strptime(x,"%Y-%m-%d %H:%M:%S %Z%z").isoformat()) #output :2019-10-28T21:02:00+00:00

问题是:

  1. 无法确定变量的日期,即 datetime.datetime.strptime(date, "%Y-%m-%d %H:%M")
  2. 无法获得 UTC 格式的“Z”部分

任何人都可以让我知道如何将其转换为上述格式。

标签: pythonpython-3.x

解决方案


我们可以使用如下相同部分的代码来以格式显示

local = pytz.timezone ("Asia/Kolkata")
datetime_without_tz = datetime.datetime.strptime("2015-02-14 12:34:56", "%Y-%m-%d %H:%M:%S")
datetime_with_tz = local.localize(datetime_without_tz, is_dst=None)
print(datetime_with_tz.strftime('%Y-%m-%dT%H:%M:%SZ %Z%z'))
>>> 2015-02-14T12:34:56Z IST + offset

转换为指定的时区,我们可以使用

datetime_in_utc = datetime_with_tz.astimezone(pytz.utc)
print (datetime.datetime.strptime(x,"%Y-%m-%d %H:%M:%S %Z%z")

推荐阅读