• 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/


  • 相关阅读:
    C++_构造函数与析构函数
    华为模拟机试_C++题解
    OOP_由C到C++
    OOP_面向对象程序设计概述
    java ssm 后台框架平台 项目源码 websocket即时聊天发图片文字 好友群组 SSM源码
    springmvc SSM 多数据源 shiro redis 后台框架 整合
    【面经】5年Java面试亲身经验
    【快手初面】要求3个线程按顺序循环执行,如循环打印A,B,C
    手工实现HttpBasic校验
    Java 并发系列(一) ThreadPoolExecutor源码解析及理解
  • 原文地址:https://www.cnblogs.com/Jerryshome/p/2271076.html
Copyright © 2020-2023  润新知