Python如何将"2021-08-17T20:03:36.480-07:00"字符串转为本地时间
错误原因排查
你代码报错的核心原因是:astimezone是datetime对象的专属方法,你执行' '.join(utc_time.split("T"))后得到的是字符串类型结果,直接对字符串调用该方法就会触发AttributeError。
原始错误代码
from datetime import datetime def convert_utc_local(utc_time): conv_time = ' '.join(utc_time.split("T")) return conv_time.astimezone(tzlocal())
报错信息:
AttributeError: 'str' object has no attribute 'astimezone'
正确实现方案
需求是将带时区的ISO格式时间字符串(例如2021-08-17T20:03:36.480-07:00)转换为YYYY-MM-DD HH:MM:SS格式的指定时区时间,以下是可直接运行的完整代码:
from datetime import datetime from dateutil import tz # 若需要使用运行环境的本地时区,可额外引入 from tzlocal import get_localzone def convert_utc_local(utc_time): # 可根据需求替换时区标识,使用本地时区则替换为 to_zone = get_localzone() to_zone = tz.gettz('Asia/Tokyo') # 先将字符串转换为datetime对象,再做时区转换 iso_to_local = datetime.fromisoformat(utc_time).astimezone(to_zone) # 移除时区信息后格式化为目标格式的字符串 dt = str(iso_to_local.replace(tzinfo=None).isoformat(' ', timespec='seconds')) return dt # 测试用例 print(convert_utc_local("2021-08-17T20:03:36.480-07:00")) # 输出:2021-08-18 12:03:36
内容的提问来源于stack exchange,提问作者chixcy
相关产品推荐
相关产品推荐

