时区处理

在python中时区的处理由第三方模块pytz提供。

datetime时区转换
  1. 默认初始化的datetime类型是不带有时区信息的
from datetime import datetime,timedelta
d1 = datetime(2019,1,1,9,30)
datetime.datetime(2019, 1, 1, 9, 30)

print(d1.tzinfo)
None
  1. 创建时区对象
tz_utc = timezone('utc')
tz_loc = timezone('Asia/ShangHai')
<DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD>
  1. 设置datetime为指定的时区localize
d2  = tz_utc.localize(d1) #设置为utc时区
datetime.datetime(2019, 1, 1, 9, 30, tzinfo=<UTC>)

4.将datetime转换为指定的时区astimezone

d2.astimezone(tz_loc)
datetime.datetime(2019, 1, 1, 17, 30, tzinfo=<DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>)
pandas中的时区处理
时间序列

默认pandas中的时间序列是简单类型,它并不含时区信息。(这点和datetime类型一样)

rng = pd.date_range('20120309 09:30',periods=6,freq='D')
DatetimeIndex(['2012-03-09 09:30:00', '2012-03-10 09:30:00',
               '2012-03-11 09:30:00', '2012-03-12 09:30:00',
               '2012-03-13 09:30:00', '2012-03-14 09:30:00'],
              dtype='datetime64[ns]', freq='D')
 ts = pd.Series(np.random.randn(len(rng)),index = rng)
print(ts.index.tz)
None 	
指定时区创建时间序列
pd.date_range('20120309 09:30',periods=10,freq='D',tz='UTC')
DatetimeIndex(['2012-03-09 09:30:00+00:00', '2012-03-10 09:30:00+00:00',
               '2012-03-11 09:30:00+00:00', '2012-03-12 09:30:00+00:00',
               '2012-03-13 09:30:00+00:00', '2012-03-14 09:30:00+00:00'],
              dtype='datetime64[ns, UTC]', freq='D')

设置时区,并转为成其他的时区
创建时间序列
ts = pd.Series(np.random.randn(6),index=pd.date_range('20190101',periods=6))
2019-01-01   -0.946268
2019-01-02   -1.371671
2019-01-03   -1.327071
2019-01-04   -0.369434
2019-01-05    1.379586
2019-01-06   -0.280945
Freq: D, dtype: float64

创建时区
utc = timezone('utc') 
asia = timezone('Asia/ShangHai')
将ts设定为指定的时区
ts = ts.tz_localize(utc)
2019-01-01 00:00:00+00:00   -0.946268
2019-01-02 00:00:00+00:00   -1.371671
2019-01-03 00:00:00+00:00   -1.327071
2019-01-04 00:00:00+00:00   -0.369434
2019-01-05 00:00:00+00:00    1.379586
2019-01-06 00:00:00+00:00   -0.280945
Freq: D, dtype: float64

转换为指定的时区
ts = ts.tz_convert(asia)
2019-01-01 08:00:00+08:00   -0.946268
2019-01-02 08:00:00+08:00   -1.371671
2019-01-03 08:00:00+08:00   -1.327071
2019-01-04 08:00:00+08:00   -0.369434
2019-01-05 08:00:00+08:00    1.379586
2019-01-06 08:00:00+08:00   -0.280945
Freq: D, dtype: float64
Timestamp时区转换
stamp = pd.Timestamp('20110312 04:00')
Timestamp('2011-03-12 04:00:00')

stamp_utc = stamp.tz_localize('utc')
Timestamp('2011-03-12 04:00:00+0000', tz='UTC')

stamp_loc=stamp_utc.tz_convert('Asia/ShangHai')
Timestamp('2011-03-12 12:00:00+0800', tz='Asia/Shanghai')

TimeStamp存储了一个19700101到当前时间的纳秒数,当时区转换的时候,这个数是不会变化的。

时区不同的Series的操作会转换为UTC
ts = pd.Series(np.random.randn(10),index=pd.date_range('20120307 09:30',periods=10,freq='B'))
2012-03-07 09:30:00   -0.741151
2012-03-08 09:30:00   -0.248209
2012-03-09 09:30:00    0.879398
2012-03-12 09:30:00    1.872593
2012-03-13 09:30:00    0.790101
2012-03-14 09:30:00    3.042974
2012-03-15 09:30:00   -0.795131
2012-03-16 09:30:00   -0.442138
2012-03-19 09:30:00    0.320051
2012-03-20 09:30:00    0.205048
Freq: B, dtype: float64

ts1 = ts[:7].tz_localize('Asia/ShangHai')
2012-03-07 09:30:00+08:00   -0.741151
2012-03-08 09:30:00+08:00   -0.248209
2012-03-09 09:30:00+08:00    0.879398
2012-03-12 09:30:00+08:00    1.872593
2012-03-13 09:30:00+08:00    0.790101
2012-03-14 09:30:00+08:00    3.042974
2012-03-15 09:30:00+08:00   -0.795131

ts2 = ts1[2:].tz_convert('Europe/Moscow')
2012-03-09 05:30:00+04:00    0.879398
2012-03-12 05:30:00+04:00    1.872593
2012-03-13 05:30:00+04:00    0.790101
2012-03-14 05:30:00+04:00    3.042974
2012-03-15 05:30:00+04:00   -0.795131
Freq: B, dtype: float64

res = ts1+ts2
2012-03-07 01:30:00+00:00         NaN
2012-03-08 01:30:00+00:00         NaN
2012-03-09 01:30:00+00:00    1.758796
2012-03-12 01:30:00+00:00    3.745185
2012-03-13 01:30:00+00:00    1.580203
2012-03-14 01:30:00+00:00    6.085947
2012-03-15 01:30:00+00:00   -1.590263
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值