python處理多時區相關問題

來源:互聯網
上載者:User

隨著國際化的需求越來越多,在考慮多語言的同時也不可避免的要涉及到多時區的問題。
python中對多語言也就是I18N的支援要好很多,但在多時區的處理上就稍微差一些,python標準庫中雖然在datetime提供了tzinfo ,但很可惜只是一個abstract class,使用者需要自己實現tzinfo。要實現local timezone的話可以藉助time模組的time.timezone來實現,但還是比較繁瑣。很奇怪的是,python標準庫中為何不提供一個local timezone?更令人費解的是python的datetime的strptime方法卻不支援帶時區的時間字串的解析。就目前的情況來看,如果想在不依賴於第三方開發包或者自己實現相關解析代碼的情況下,只能寄希望於python 3.X了,至少在python2.7.2的標準庫中還沒有看到很好解決方式。
就目前而來,要想妥善的解決python中的多時區問題的話,最好是採用 python-dateutil 和 pytz,兩個開發包各有千秋吧,但python-dateutil中的parser是pytz所短缺的,在解析時間串的時候很好用。
以下是一個簡單的程式碼範例,用於展示如何採用python-dateutil來完成帶時區字串的解析,以及怎麼藉助datetime來輸出帶時區標識的時間串:

# -*- encoding: utf-8 -*-import datetimeimport timeimport dateutilfrom dateutil.parser import parsedef test_format():    print "test time format with timezone"    fmt = '%Y-%m-%d %H:%M:%S %z'    now = datetime.datetime.now()    print now.strftime(fmt)    now = datetime.datetime.now(dateutil.tz.tzlocal())    now_str = now.strftime(fmt)    print "now is: "    print now_str    print "utcnow is: "    print datetime.datetime.utcnow()    datestr = "2011-06-02 14:00:01+07"    dt = parse(datestr)    print "Original datetime ", dt.strftime(fmt)    print "Local datetime ", dt.astimezone(dateutil.tz.tzlocal()) 

 上述代碼運行結果如下:
>>>
test time format with timezone
2011-12-01 19:15:27
now is:
2011-12-01 19:15:27 +0800
utcnow is:
2011-12-01 11:15:27.745000
Original datetime  2011-06-02 14:00:01 +0700
Local datetime  2011-06-02 15:00:01+08:00
>>>

需要注意的是,在安裝python-dateutil時要根據python版本選擇合適的python-dateutil版本,目前而言,python2.X需要選擇python-dateutil 1.5, python-dateutil 2.0是針對python3.X的,不能在python2.X上使用

附錄:

python-dateutil :http://labix.org/python-dateutil
pytz :http://pytz.sourceforge.net/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.