当前位置: 移动技术网 > IT编程>脚本编程>Python > python 带时区的日期格式化操作

python 带时区的日期格式化操作

2020年10月24日  | 移动技术网IT编程  | 我要评论
如下所示:wed, 23 oct 2019 21:12:01 +0800wed, 23 oct 2019 06:08:37 +0000 (gmt)fri, 11 oct 2019 12:42:07 +

如下所示:

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处理带timezone的datetime类型

在存储时间类型到数据库的时候,通常使用datetime类型。使用datetime类型就会遇到时区timezone的问题。为了能够处理timezone, 推荐存数据库的使用存入的是基于utc的时间日期,在本地取用的时候在转成本地时间。

python定义了抽象类tzinfo, 这个class不能直接使用。3.x版本(至少3.4, 3.5)定义了timezone class。但是这个timezone还是不如第三方pytz类好用。

还有一个问题就是如何得到本机的timezone。在time class里面可以得到一个time.timezone, 是一个基于秒的offset值。注意这个time不是datetime.time, 就是time,用于os相关的时间信息。不是很好用,推荐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 带时区的日期格式化操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持移动技术网。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网