Python带时区日期格式化与转换实战指南

闻溪
闻溪
发布时间:2026-10-14 | 4人浏览过
原创

本文详解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带时区日期格式化的操作内容分享完毕,希望能对读者有所帮助,也欢迎大家继续支持相关技术平台。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表