如何用Pytz转换datetime,timestamp,series的时区
1. Show the arguments of time-zone in all_timezone attibutes in pytz
import pandas as pd
import pytz
import datetime
print(pytz.all_timezones[:20:])
print(list(filter(lambda x: 'Singapore' in x, pytz.all_timezones)))
2. Create a timezone_naive timestamp
#timestamp is function of pandas
import pandas as pd
import pytz
import datetime
ts=pd.Timestamp('2019-08-13 07:00:00')
ts=ts.tz_localize('Asia/Singapore')
ts.tz_convert('America/Denver')
3. Create a time_zone naive datetime using datetime module
#under datetime class , there are datetime() and date =() functions
a=datetime.datetime(2019,8,9,7,0,0)
b=datetime.date(2019,8,9)
print(type(a)) #type:<class 'datetime.datetime'> cannot use tz_localize()
#to use tz_localize, datetime/date object must be converted to Timestamp
a=pd.Timestamp(a)
b=pd.Timestamp(b)
print(a)
print(b)
a=a.tz_localize('Singapore')
b=b.tz_localize('Singapore')
print(a)
print(b)
a=a.tz_convert('America/Denver')
b=b.tz_convert('America/Denver')
print(a)
print(b)
4. Create a date range: the element inside of index object are already timestamp, can be used tz_localzie directly
c=pd.date_range('2019-01-03 09:00:00',periods=2,freq='d')
print(type(c[0])) # type: <class 'pandas._libs.tslibs.timestamps.Timestamp'>
print(type(c)) #type: <class 'pandas.core.indexes.datetimes.DatetimeIndex'>
c=c.tz_localize('Asia/Singapore').tz_convert('America/Denver')
print(c)
5. Series:
5.1 Timestamp is index: use tz_localize/tz_convert directly
import pandas as pd
import numpy as np
series_1=pd.Series(np.linspace(0,9,10),index=pd.date_range('2019-01-01',periods=10,freq='d'))
series_1=series_1.tz_localize('Asia/Singapore').tz_convert('America/Denver')
5.2 Timestamp is values: use dt.tz_localize/tz_convert
import pandas as pd
import numpy as np
series_2=pd.Series(pd.date_range('2019-01-01',periods=10,freq='d'),index=np.linspace(0,9,10))
series_2=series_2.dt.tz_localize('Asia/Singapore').dt.tz_convert('America/Denver')
5.3 convert tz-aware values into tz_naive timestamp : use tz_localize(None)
import pandas as pd
import numpy as np
series_3=pd.Series(pd.date_range('2019-01-01',periods=10,freq='d'),index=np.linspace(0,9,10))
series_3=series_3.dt.tz_localize('Asia/Singapore').dt.tz_convert('America/Denver')
series_3=series_3.dt.tz_localize(None)
’
5.4 convert a tz_naive timestamp into str: use astype(str)
import pandas as pd
import numpy as np
series_4=pd.Series(pd.date_range('2019-01-01',periods=10,freq='d'),index=np.linspace(0,9,10))
series_4=series_4.dt.tz_localize('Asia/Singapore').dt.tz_convert('America/Denver')
series_4=series_4.dt.tz_localize(None).astype(str)