時區轉換是你們常常遇到的問題,本文的代碼能夠實現如下功能:html
軟件包:python
timezonefinder 可根據所給的經緯度找到對應的時區信息。爲節省計算時間,能夠提早將相應的時區信息讀入內存中,也即設置in_memory=True。git
# Import packages
from timezonefinder import TimezoneFinder
import pandas as pd
# Find timezone based on longitude and latitude
tf = TimezoneFinder(in_memory=True)
longitude = -88
latitude = 36
local_time_zone = tf.timezone_at(lng=longitude, lat=latitude)
local_time_zone
複製代碼
'America/Chicago'
複製代碼
此處,咱們利用pandas date_range函數建立了一個4小時間隔的時間序列。api
# Create naive timestamps using pandas
test_naive = pd.date_range('2019-04-06', '2019-04-07', freq='4H')
test_naive
複製代碼
DatetimeIndex(['2019-04-06 00:00:00', '2019-04-06 04:00:00',
'2019-04-06 08:00:00', '2019-04-06 12:00:00',
'2019-04-06 16:00:00', '2019-04-06 20:00:00',
'2019-04-07 00:00:00'],
dtype='datetime64[ns]', freq='4H')
複製代碼
以上輸出顯示的時間序列是沒有時區信息的,咱們此處假設上面的時區是UTC,而後咱們能夠給它加上時區信息,所用到的函數是 tz_localize。微信
# Set time to be UTC
test_UTC = test_naive.tz_localize('UTC')
test_UTC
複製代碼
DatetimeIndex(['2019-04-06 00:00:00+00:00', '2019-04-06 04:00:00+00:00',
'2019-04-06 08:00:00+00:00', '2019-04-06 12:00:00+00:00',
'2019-04-06 16:00:00+00:00', '2019-04-06 20:00:00+00:00',
'2019-04-07 00:00:00+00:00'],
dtype='datetime64[ns, UTC]', freq='4H')
複製代碼
如今上面的時間序列已經有時區信息了,也即+00:00。 此時咱們就能夠利用pandas裏的tz_convert 將UTC時間轉換爲任意時區的時間。函數
# Convert UTC to local time
test_local = test_UTC.tz_convert(local_time_zone)
test_local
複製代碼
DatetimeIndex(['2019-04-05 19:00:00-05:00', '2019-04-05 23:00:00-05:00',
'2019-04-06 03:00:00-05:00', '2019-04-06 07:00:00-05:00',
'2019-04-06 11:00:00-05:00', '2019-04-06 15:00:00-05:00',
'2019-04-06 19:00:00-05:00'],
dtype='datetime64[ns, America/Chicago]', freq='4H')
複製代碼
輸出顯示以上已經轉化爲 -05:00。有時候咱們還須要將時間格式轉換爲原來的樣式,也就是沒有時區信息的格式,這時咱們還能夠用 tz_localize 這個函數,不過此時參數應該是None。spa
# Convert back to naive timestamps, but in local time zone.
test_local_naive = test_local.tz_localize(None)
test_local_naive
複製代碼
DatetimeIndex(['2019-04-05 19:00:00', '2019-04-05 23:00:00',
'2019-04-06 03:00:00', '2019-04-06 07:00:00',
'2019-04-06 11:00:00', '2019-04-06 15:00:00',
'2019-04-06 19:00:00'],
dtype='datetime64[ns]', freq='4H')
複製代碼
總結一下:code
微信公衆號:測度空間htm