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

 

posted @ 2022-03-31 18:58  eliwang  阅读(2410)  评论(0编辑  收藏  举报