【问题标题】:How can I convert from UTC time to local time in python?如何在 python 中将 UTC 时间转换为本地时间?
【发布时间】:2021-10-10 08:21:32
【问题描述】:

那么,我想将UTC日期时间2021-08-05 10:03:24.585Z转换为印度日期时间如何转换呢?

我尝试的是

from datetime import datetime

from pytz import timezone

st = "2021-08-05 10:03:24.585Z"

datetime_object = datetime.strptime(st, '%Y-%m-%d %H:%M:%S.%fZ')

local_tz = timezone('Asia/Kolkata')
start_date = local_tz.localize(datetime_object)
print(start_date.replace(tzinfo=local_tz))

但输出仍然不是我提到的时区,如何转换时间并从时间打印时间。

输出:

2021-08-05 10:03:24.585000+05:21

【问题讨论】:

  • @deceze 当我尝试只打印start_date 时,输出为2021-08-05 10:03:24.585000+05:30
  • @MrFuppes 当我使用astimezone() 时,它说不能转换天真的日期时间。我是这方面的新手,您能抽出一些时间帮助我解释一下吗?
  • 是的,问题出在您的解析指令中的Z。它基本上使strptime 忽略了“Z”应该被解析为 aware 日期时间这一事实,这意味着 datetime 对象“知道”它属于某个时区,在这种情况下为 UTC。

标签: python python-3.x datetime time timezone


【解决方案1】:

将日期/时间字符串正确解析为 UTC 日期时间,并使用 astimezone 而不是 replace转换到某个时区(cmets 中较新的 Python 版本(3.9+)的选项) :

from datetime import datetime
# from zoneinfo import ZoneInfo
from dateutil.tz import gettz

st = "2021-08-05 10:03:24.585Z"
zone = "Asia/Kolkata"

# dtUTC = datetime.fromisoformat(st.replace('Z', '+00:00'))
dtUTC = datetime.strptime(st, '%Y-%m-%d %H:%M:%S.%f%z')

# dtZone = dtUTC.astimezone(ZoneInfo(zone))
dtZone = dtUTC.astimezone(gettz(zone))

print(dtZone.isoformat(timespec='seconds'))
# 2021-08-05T15:33:24+05:30

如果您只需要当地时间,即您机器的设置,您也可以使用astimezone(None)

【讨论】:

  • 这会导致这个错误AttributeError: type object 'datetime.datetime' has no attribute 'fromisoformat'
  • @hamere: 你用的是哪个 Python 版本?
  • 我使用python 3.7版本
  • @hamere 听起来像是“升级的时间” ^^ 实际上这个功能是在 Python 3.7 中引入的,所以它应该工作......你可以试试datetime.strptime(st, '%Y-%m-%d %H:%M:%S.%f%z')
【解决方案2】:

你可以这样使用:

from datetime import datetime
from dateutil import tz

from_zone = tz.gettz('UTC')
to_zone = tz.gettz('Asia/Kolkata')

utc = datetime.strptime('2011-01-21 02:37:21', '%Y-%m-%d %H:%M:%S')

utc = utc.replace(tzinfo=from_zone)

central = utc.astimezone(to_zone)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    • 2020-02-08
    • 1970-01-01
    • 2018-10-30
    • 2013-08-13
    相关资源
    最近更新 更多