python 帶時區的日期格式化操作

2022-09-27 03:24:11 字數 2778 閱讀 7001

如下所示:

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)www.cppcns.com:

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.fromtimestampfuzgtm(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.strpfuzgtmtime(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 帶時區的日期格式化操作

本文位址:

Python格式化日期

我們可以使用 time 模組的 strftime 方法來格式化日期,time.strftime format t usr bin python coding utf 8 import time 格式化成2016 03 20 11 45 39形式 print time.strftime y m d h...

Python 日期格式化

獲取當前日期 time.time 獲取元組形式的時間戳 time.local time.time 格式化日期的函式 基於元組的形式進行格式化 1 time.asctime time.local time.time 2 time.strftime format t 將格式字串轉換為時間戳 time.s...

NSData 日期格式化 顯示格式 時區獲取設定

nsdateformatter格式化日期 1.日期物件格式化為字串 2013 07 29 15 20 59 2013年07月29日 日期物件 字串 nsdate nowdate nsdate date nsdateformatter dateformatter nsdateformatterallo...