時區轉換

通常情況下,python 語言當中的時區轉換都會使用 pytz 這個包。但是,在一些使用冬令時和夏令時的國傢(美國,墨西哥),冬令時和夏令時切換的時候,pytz 的時區轉換可能就會出錯瞭。這裡記錄一種,把北京時間先轉換成 UTC 時間,再根據 local 的 UTC 時區,轉換成 local 時間的方法。

from datetime import datetime, timedelta

def beijing2utc(beijing_time):
beijing_time = datetime.strptime(beijing_time, '%Y-%m-%d %H:%M:%S')
utc_time = beijing_time - timedelta(hours=8) # UTC隻是比北京時間提前瞭8個小時
utc_time = utc_time.strftime("%Y-%m-%d %H:%M:%S") # 轉換成復合要求的字符串格式
return utc_time

def utc2local(utc_time,utc_zone):
"""
utc_zone:UTC-05:00
"""
utc_diff = int(utc_zone.split(":")[0].replace('UTC',''))
print(utc_diff)
utc_time = datetime.strptime(utc_time, '%Y-%m-%d %H:%M:%S')
local_time = utc_time + timedelta(hours=utc_diff)
local_time = local_time.strftime("%Y-%m-%d %H:%M:%S")
return local_time

def beijing2local(beijing_time,local_utc_zone):
"""
beijing_time: %Y-%m-%d %H:%M:%S string
local_utc_zone: 當地的 utc 時區
"""
# 北京時間轉 uct 標準時間
utc_time = beijing2utc(beijing_time)
# utc 時間轉當地時間
local_time = utc2local(utc_time,local_utc_zone)
return local_time

def timestamp_to_fmt_udf(timestamp, local_utc_tz):
"""
時間戳轉指定時間格式
:param timestamp: 時間戳
:param local_utc_tz: 當地utc 時區
:return: 該城市的時間格式 '%Y-%m-%d %H:%M:%S'
"""
fmt = '%Y-%m-%d %H:%M:%S'
# 時間戳轉當地時間
timefrom = datetime.utcfromtimestamp(timestamp)
timefrom = timefrom.replace(tzinfo=pytz.utc).strftime(fmt)
timeto = utc2local(timefrom,local_utc_tz)
return timeto

赞(0)