zoukankan      html  css  js  c++  java
  • python处理多时区相关问题

    随着国际化的需求越来越多,在考虑多语言的同时也不可避免的要涉及到多时区的问题。
    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 datetime
    import time
    import dateutil
    from dateutil.parser import parse
    
    def 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/


  • 相关阅读:
    入浅出MySQL 8.0 lock_sys锁相关优化 原创 腾讯数据库技术 腾讯数据库技术 2021-03-08
    以模型为中心,携程契约系统的演进
    bs
    外观模式
    设计接口时严格区分map、list,方便前端使用。
    t
    The HyperText Transfer Protocol (HTTP) 504
    入理解 epoll 原创 冯志明 Qunar技术沙龙 2021-03-10
    一次XSS和CSRF的组合拳进攻 (CSRF+JSON)
    当程序员具备了抽象思维 从码农到工匠 阿里巴巴中间件 2021-03-09
  • 原文地址:https://www.cnblogs.com/Jerryshome/p/2271076.html
Copyright © 2011-2022 走看看