当前位置: 首页 > 工具软件 > pytz > 使用案例 >

pytz 将date确定时区后转换成任意时区

糜凯泽
2023-12-01

目录

0. goal

1. pytz 

2. func 

3. 实例


0. goal

将字符串类型的日期时间, 如 "2021-03-16 16:05:05" 确认为某一时区时间后,转换成北京时间。(根据个人需求去掉了时间只保留日期)

 

1. pytz 

可以显示所有国家地区的各个时区,通过这个确定需要的时区 

pytz.all_timezones
Out[5]: 
['Africa/Abidjan',
 'Africa/Accra',
 'Africa/Addis_Ababa',
 'Africa/Algiers',
 'Africa/Asmara',
 'Africa/Asmera',
 'Africa/Bamako',
 'Africa/Bangui',
 'Africa/Banjul',
...]

 

2. func 

有两种方法: astimezone, localize

区别:

localize 官方解释为 This is used to localize a naive datetime (datetime with no timezone information)

astimezone 官方解释为 converting an existing localized time using the standard astimezone() method

from datetime import datetime
from pytz import timezone
import pytz


tokyo = timezone('Asia/Tokyo')
shanghai = timezone('Asia/Shanghai')
fmt = '%Y-%m-%d %H:%M:%S %Z%z'

# 使用 tokyo的时区去确定日期时间的时区
loc_dt = tokyo.localize(datetime(2021, 3, 16, 16, 53, 0))
print(loc_dt.strftime(fmt))

# 在 tokyo时区的基础上 转换为上海时区
sh_dt = loc_dt.astimezone(shanghai)
print(sh_dt.strftime(fmt))


>>> [OUT]
2021-03-16 16:53:00 JST+0900
2021-03-16 15:53:00 CST+0800

3. 实例

import datetime
import time
from pytz import timezone


def transfer_timezone(date):
    
    # Set timezone 
    tokyo = timezone('Asia/Tokyo')
    shanghai = timezone('Asia/Shanghai')

    # Create datetime object
    d = datetime.datetime.strptime(date, "%Y-%m-%d %H:%M:%S")
    print(d.strftime("%Y-%m-%d %H:%M:%S"), d.tzinfo)

    # Set the time zone to 'Asia/Tokyo'
    d = tokyo.localize(d)
    print(d.strftime("%Y-%m-%d %H:%M:%S"), d.tzinfo)

    # Set the time zone to 'Asia/Shanghai'
    d = d.astimezone(shanghai)
    print(d.strftime("%Y-%m-%d %H:%M:%S"), d.tzinfo)

    # only needs date
    print(d.strftime("%Y-%m-%d"))
    return d.strftime("%Y-%m-%d")
[IN]
transfer_timezone("2021-03-16 16:05:05")

[OUT]
2021-03-16 16:05:05 None   # 默认无时区
2021-03-16 16:05:05 Asia/Tokyo  # 确认为东京时间
2021-03-16 15:05:05 Asia/Shanghai  # 转到北京时间
2021-03-16  # 我自己只要前面的日期

 

 类似资料: