目录
将字符串类型的日期时间, 如 "2021-03-16 16:05:05" 确认为某一时区时间后,转换成北京时间。(根据个人需求去掉了时间只保留日期)
可以显示所有国家地区的各个时区,通过这个确定需要的时区
pytz.all_timezones
Out[5]:
['Africa/Abidjan',
'Africa/Accra',
'Africa/Addis_Ababa',
'Africa/Algiers',
'Africa/Asmara',
'Africa/Asmera',
'Africa/Bamako',
'Africa/Bangui',
'Africa/Banjul',
...]
有两种方法: 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
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 # 我自己只要前面的日期