Python带时区日期格式化与转换实战指南
本文详解Python中处理带时区日期格式化的方法,涵盖将不同格式的时间字符串转换为东八区北京时间的具体代码实现。同时介绍如何存储UTC时间并在本地读取时转换,通过pytz和tzlocal库解决时区转换问题,提供获取本机时区及常用代码示例。
不同格式日期字符串转北京时间示例
如下所示:
Wed, 23 Oct 2019 21:12:01 +0800
Wed, 23 Oct 2019 06:08:37 +0000 (GMT)
Fri, 11 Oct 2019 12:42:07 +0800 (CST)
Wed, 23 Oct 2019 06:08:37 +0000 (UTC)
这里展示了多种不同的日期格式化方式,主要演示如何将带有不同时区标识的时间转换为北京时间(即东八区时间)。需要注意的是,字符串末尾的时区表示方式各不相同,解析时需对应处理。
def getTimeStamp(self, date):
result = re.search(r"[\-\+]\d+", date)
if result:
time_area = result.group()
symbol = time_area[0]
offset = int(time_area[1]) + int(time_area[2])
if symbol == "+":
format_str = '%a, %d %b %Y %H:%M:%S '+ time_area
if "UTC" in date:
format_str = '%a, %d %b %Y %H:%M:%S '+ time_area+ ' (UTC)'
if "GMT" in date:
format_str = '%a, %d %b %Y %H:%M:%S ' + time_area + ' (GMT)'
if "CST" in date:
format_str = '%a, %d %b %Y %H:%M:%S ' + time_area + ' (CST)'
utcdatetime = time.strptime(date, format_str)
tempsTime = time.mktime(utcdatetime)
tempsTime = datetime.datetime.fromtimestamp(tempsTime)
if offset > 8:
offset = offset -8
tempsTime = tempsTime + datetime.timedelta(hours=offset)
localtimestamp = tempsTime.strftime("%Y-%m-%d")
else:
format_str = '%a, %d %b %Y %H:%M:%S ' + time_area
utcdatetime = time.strptime(date, format_str)
tempsTime = time.mktime(utcdatetime)
tempsTime = datetime.datetime.fromtimestamp(tempsTime)
tempsTime = tempsTime + datetime.timedelta(hours=(offset + 8))
localtimestamp = tempsTime.strftime("%Y-%m-%d")
return localtimestamp
Python处理带时区datetime的核心概念
补充知识:Python处理带timezone的datetime类型
在将时间类型数据存入数据库时,通常采用DateTime类型。使用此类类型会涉及时区(timezone)问题。为了正确处理时区,建议数据库中统一存储基于UTC的时间,而在本地应用或展示时再转换为本地时间。
Python定义了抽象类tzinfo,该类不能直接实例化使用。在Python 3.x版本(至少包括3.4和3.5)中,标准库定义了timezone类。不过,相比之下,第三方库pytz的功能更为强大和便捷。
另一个常见问题是获取本机所在的时区。在time模块中可以获取time.timezone属性,它是一个以秒为单位的偏移量。请注意,这里的time指的是time模块而非datetime.time类,它主要用于操作系统相关的时间信息,使用体验一般。推荐使用tzlocal库来获取本地时区信息。
安装必要的时区处理库
安装pytz和tzlocal
使用pip命令进行安装即可。
pip install pytz
pip install tzlocal
时区转换的具体代码实现
如何使用
获取当前时间,用于数据持久化存储。
from datetime import datetime
t = datetime.utcnow()
已知本地时间,需要转换为UTC时间用于存储。
import pytz
from tzlocal import get_localzone
tz = get_localzone() #获得本地timezone
utc = pytz.utc #获得UTC timezone
dt = datetime(2016, 6, 12, 5, 0, 0)
loc_dt = tz.localize(dt) #将DateTime数据贴上timezone
utc_dt = loc_dt.astimezone(utc) #转换到新的timezone
已知UTC时间,转换为本地时间。
import pytz
from tzlocal import get_localzone
utc = pytz.utc
tz = get_localzone()
t = datetime(x,x,x,x,x,x)
utc_dt = utc.localize(t)
loc_dt = utc_dt.astimezone(tz)
以上关于Python带时区日期格式化的操作内容分享完毕,希望能对读者有所帮助,也欢迎大家继续支持相关技术平台。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









