新聞中心
pytz模塊常用于時區(qū)的轉換,常常配合datetime一起使用。我們知道datetime除了data方法生成的時間是沒有時區(qū)概念,其他如time、datetime等都是有時區(qū)概念,即指定了tzinfo信息。

成都創(chuàng)新互聯(lián)是專業(yè)的石臺網站建設公司,石臺接單;提供成都做網站、成都網站設計、成都外貿網站建設,網頁設計,網站設計,建網站,PHP網站建設等專業(yè)做網站服務;采用PHP框架,可快速的進行石臺網站開發(fā)網頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網站,專業(yè)的做網站團隊,希望更多企業(yè)前來合作!
>>> import datetime >>> datetime.datetime.now(tz) datetime.datetime(2009, 2, 21, 15, 12, 33, 906000, tzinfo=) >>> datetime.datetime(2009, 2, 21, 15, 12, 33, tzinfo=tz) datetime.datetime(2009, 2, 21, 15, 12, 33, tzinfo= ) >>> datetime.date(2009, 2, 21, tzinfo=tz) Traceback (most recent call last): File " ", line 1, in TypeError: 'tzinfo' is an invalid keyword argument for this function >>> datetime.time(15, 12, 33, tzinfo=tz) datetime.time(15, 12, 33, tzinfo= )
時區(qū)轉換
·pytz.country_timezones(‘國家代碼’):此方法可以拿到某個國家的時區(qū)名列表。
相關推薦:《python教程》
>>>(pytz.country_timezones('cn')
['Asia/Shanghai', 'Asia/Urumqi']·pytz.timezone(‘時區(qū)名’):此方法能獲取一個tzinfo對象,該對象可在datetime生成時間中以參數(shù)的形式放入,即可生成對應時區(qū)的時間。
>>>utc = pytz.timezone('UTC')
>>>datetime.datetime.now(tz=utc)
2019-05-10 10:53:46.000929+00:00實際上,現(xiàn)在時間為18:53:46
·查看有哪些時區(qū)
pytz有all_timezones、common_timezones這兩個屬性來查看有哪些時區(qū)。
from pytz import all_timezones,common_timezones
·時間按時區(qū)轉換
這要用到datetime模塊的astimezone方法來實現(xiàn)。如下所示,開始生成本地時間,然后在轉成utc時間。
import datetime
import pytz
utc = pytz.timezone('UTC')
now_time = datetime.datetime.now()
utc_time = now_time.astimezone(tz=utc)
print(now_time,utc_time)
2019-05-10 19:02:53.499513 2019-05-10 11:02:53.499513+00:00
對于有采用了夏時制的要使用時區(qū)對象的normzlize方法來處理,如下所示:
import datetime
import pytz
utc = pytz.timezone('UTC')
now_time = datetime.datetime.now()
utc_time = utc.normalize(now_time.astimezone(tz=utc))
print(now_time,utc_time)
2019-05-10 19:08:25.286690 2019-05-10 11:08:25.286690+00:00
·LMT問題
LMT,這是Local Mean Time的縮寫,網上查一查意思是本地平均時。而且時間是+8:06,說明與UTC的時差不是8個小時整。下面有一個問題是,當我們用pytz.timezone('Asia/Shanghai') 生成的時區(qū)是LMT,而非標準的CST(就是Central Standard Time的意思)。那么這會造成什么后果呢?下面來展示下:
>>>d = datetime.datetime(2019,5,10,19,12,30,tzinfo=tz) >>>d datetime.datetime(2019, 5, 10, 19, 12, 30, tzinfo= ) >>>d = d.astimezone(utc) >>>d datetime.datetime(2019, 5, 10, 11, 6, 30, tzinfo= ) >>>d.astimezone(tz) datetime.datetime(2019, 5, 10, 19, 6, 30, tzinfo= )
由上述可以發(fā)現(xiàn),剛開始由datetime.datetime()生成的時間是LMT,接下來我將其轉換為UTC時區(qū)的時間,最后又轉回來,我們可以發(fā)現(xiàn),現(xiàn)在的時間又變成了CST標準。而這兩個標準,就直接導致其相差了6分鐘。
下面我們可以用時區(qū)對象的localize方法,將LMT準換為CST,使其統(tǒng)一。
>>>datetime.datetime(2019,5,10,20,30,32,tzinfo=tz) datetime.datetime(2019, 5, 10, 20, 30, 32, tzinfo=) >>>tz.localize(datetime.datetime(2019,5,10,20,30,32)) datetime.datetime(2019, 5, 10, 20, 30, 32, tzinfo= )
所以我的建議是生成帶時區(qū)的時間時,一定要使用timezone.localize()來生成。不要在時間對象的構造函數(shù)中傳入tzinfo的方式來實現(xiàn)。
分享標題:創(chuàng)新互聯(lián)Python教程:pythonpytz是什么
鏈接分享:http://m.5511xx.com/article/cdheede.html


咨詢
建站咨詢
