时区基本信息
在时区的信息中:
- “PRC”
- “Asia/Shanghai”
- “ETC/GMT-8”
都表示:东八区 +8,相当于中国标准时区
这里我们使用一个辅助的库pytz
来操作时区,这个库支持的全部时区如下:
import pytz
print(pytz.all_timezones)
也可以根据国家来选择时区:
from pytz import country_names, country_timezones
all_timezones = [country_timezones.get(country) for country in country_names]
python datetime使用timezone
获取当前的UTC时间:
import pytz
from datetime import datetime
from pytz import timezone
now_utc_dt = datetime.now(tz=pytz.UTC) # 当前的UTC时间
now_china_dt = now_utc_dt.astimezone(timezone('PRC')) # datetime转utc+8时间:当前实际的时间
print(now_china_dt)
任意时间直接转UTC时间
create_china_dt = datetime(2024, 1, 1, tzinfo=timezone("ETC/GMT-8"))
print(create_china_dt)
可以得到如下信息:datetime.datetime(2024, 1, 1, 0, 0, tzinfo=<StaticTzInfo 'Etc/GMT-8'>)
pandas处理时区数据
- 将任意数据转为包含时区信息的数据
import pandas as pd
dt_list = ["2024-01-01 12:00:00", "2024-01-02 12:00:00", "2024-01-03 12:00:00"]
dt_series = pd.to_datetime(dt_list, utc=True) # 以UTC标准时间加载数据
- 时区的转换
berlin_dt = dt_series.tz_convert('Europe/Berlin')
sh_dt = dt_series.tz_convert('Asia/Shanghai')
print(f"Europe/Berlin时间展示: {
berlin_dt.strftime('%Y-%m-%d %H:%M:%S')}") # 转为Europe/柏林时区(+1)
print(f"Asia/Shanghai时间展示: {
sh_dt.strftime('%Y-%m-%d %H:%M:%S')}") # 转为Europe/柏林时区(+1)
print(f"UTC时间展示: {
dt_series.tz_convert('UTC').strftime('%Y-%m-%d %H:%M:%S')}") # 转为UTC时间
得到结果:
Europe/Berlin时间展示: Index(['2024-01-01 13:00:00', '2024-01-02 13:00:00', '2024-01-03 13:00:00'], dtype='object')
Asia/Shanghai时间展示: Index(['2024-01-01 20:00:00', '2024-01-02 20:00:00', '2024-01-03 20:00:00'], dtype='object')
UTC时间展示: Index(['2024-01-01 12:00:00', '2024-01-02 12:00:00', '2024-01-03 12:00:00'], dtype='object')
- 不同时区的时间差
print(f'两个时区相差的时间间隔(秒): {
(berlin_dt - sh_dt).seconds}')
得到结果:
两个时区相差的时间间隔(秒): Int64Index([0, 0, 0], dtype='int64')
在实际的运算中,可以都转为UTC时间再计算
- 剔除时区信息
remove_dt = dt_series.tz_convert('Asia/Shanghai')
print(f"剔除时区: {
remove_dt.tz_localize(None)}") # 直接以当前保留的时区对应的时间点剔除时区信息,常用于终端展示数据前的操作
得到结果:
剔除时区: DatetimeIndex(['2024-01-01 20:00:00', '2024-01-02 20:00:00', '2024-01-03 20:00:00'], dtype='datetime64[ns]', freq=None)
文章评论