python中如何利用datetime模块进行不同时区的转换?
1、需要使用到datetime模块中的 datetime,timedelta,timezone
from datetime import datetime,timezone,timedelta # 导模块
2、datetme实例的replace()方法可以给实例添加时区信息tzinfo,并返回一个新的datetime实例
given_datetime = datetime.strptime('2022-03-31 16:00:01','%Y-%m-%d %H:%M:%S') # 指定时间datetime.datetime(2022, 3, 31, 16, 0, 1) given_datetime_by_tzinfo = given_datetime.replace(tzinfo=timezone.utc) # 返回tzinfo属性为utc时间的datetime新实例对象:datetime.datetime(2022, 3, 31, 16, 0, 1, tzinfo=datetime.timezone.utc)
3、datetime实例的astimezone()方法可以转换为任意指定的时区
将utc时间转换为东八区时间:
given_datetime_by_tzinfo.astimezone(timezone(timedelta(hours=8))) # 将给定的utc时间转换为东八区时间(Asia/Shanghai):datetime.datetime(2022, 4, 1, 0, 0, 1, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800)))
4、utc时间如何转换为本地时间
from datetime import datetime, timedelta def utc_to_local(utc_str, timezone=8): ''' utc时间转本地时间 :param utc_str: utc时间字符串 :param timezone: 时区(默认东八区) :return: ''' try: given_datetime = datetime.strptime(utc_str, '%Y-%m-%dT%H:%M:%SZ') except: given_datetime = datetime.strptime(utc_str, '%Y-%m-%dT%H:%M:%S.%fZ') local_datetime = given_datetime + timedelta(hours=timezone) return datetime.strftime(local_datetime, '%Y-%m-%d %H:%M:%S') print(utc_to_local("2012-03-20T16:00:00Z")) # 2012-03-21 00:00:00 print(utc_to_local("2020-03-21T17:49:42.319772Z")) # 2020-03-22 01:49:42