python的时区处理

http://blog.renren.com/blog/355284305/908152028

最近用python写一份darwin的读日志脚本。darwin服务器记录的是GMT(格林威治时间)。按照北京时间来算需要+8小时。但是自己转换程序写起来太麻烦,需要判断是否过了一天,是否过了一个月,是否过了一年。更悲剧的是需要判断润年。。。。

    自己搜索了一下,大概有两种方法:写一个tzinfo的子类,或者用pytz模块来解决。

    相比与后者前者实在是有点麻烦。。。我也懒得看,直接用第二种。

    首先需要在程序里引入两个模块:

    import datetime

    import pytz                        (PS:这个模块需要另外下载,下载方法见附录)

    包含模块后可以使用pytz和datetime类的一些方法。其中datetime用于时区转换,pytz用于产生一个时区(timezone)对象,在转换时区的时候会用到。

    命令行下如果输入:

    pytz.country_timezones('cn')   则会返回:                  (这个命令可以望文生义啊,很好懂。。。)

    ['Asia/Shanghai', 'Asia/Harbin', 'Asia/Chongqing', 'Asia/Urumqi', 'Asia/Kashgar']

    不难发现,这一句命令其实返回了中国的时区(-_-!我不得不涂槽居然没有beijing。。。。。)

    其中urumqi是乌鲁木齐,kashgar是喀什。

    接下来,我们可以创建一个时区对象:

    tz=pytz.timezone('Asia/Shanghai')

    这东西在时区转换的时候要用到。因为你必须告诉datetime你要转到具体哪个时区。

    GMT标准时区对象可以这样得到:

    utc=pytz.utc,   这里utc就是世界标准时间。

    如果是想使用北京时区,用上海时区可以勉强替代。但是这里还是有bug。。。。。因为上海时间跟北京时间莫名其妙差了6分钟。。。。。。

    一般解决方法就是。。。。改成这样子。。。:

    tz=pytz.timezone('Asia/Taipei')

    你没看错。。。就是台北。。。别问我为啥台北不算中国的。。。

    第二步,创建一个时间对象。可以从系统获取当前时间,当然需要指定时区。如下:

    dt=datetime.datetime.now(tz)

    这时候返回一个datetime.datetime对象。

    也可以自己指定时间。如下:

    dt=datetime.datetime(2013,06,28,20,37,12,tzinfo=tz)

    它的格式就是年月日时分秒外加时区对象。要注意的是,年月日时分秒必须用int类型给出。

    同时,还可以只指定日期或者时间,如下:

    dt=datetime.date(2013,06,28,tzinfo=tz)

    or

    dt=datetime.time(20,37,12,tzinfo=tz)

    注意这里得到的dt都不是strting类型的,而是datetime.datetime对象。

    最后一步进行时区转换,我们将台北时间转换为世界时间:

    GMT=dt.astimezone(utc)

    至此转换完成。当然如果想把GMT转换为台北时间就这么写:

    Taipei=GMT.astimezone(tz)    tz即上面定义的台北时区对象。

    当然,如果单纯的想要输出时间,只要简单地print对象:

    print GMT

    如果想把时间换成字符转作进一步处理,则可以用strftime()方法。在strftime方法中需要指明输出格式。比如:

    my_date=Taipei.strftime("%Y-%m-%d %H:%M:%S")

    print my_date

    此时输出:

    2013-06-28  20:37:12

    my_date已经是一个字符串了,可以用它作进一步处理。

    顺便说一句,括号中的格式也是望文生义的,y即year,依次类推。而且格式可以随便你自己指派,你可以不加符号“-”,写作:

    my_date=Taipei.strftime("%Y%m%d %H:%M:%S")

    print my_date

    那么会直接输出:

    20130628  20:37:12   


附录:

    pytz模块的安装。

    先安装easy_install。在终端输入:

    sudo apt-get install python-setuptools

    然后使用axel下载pytz包:

    sudo apt-get install axel

    axel http://pypi.python.org/packages/2.7/p/pytz/pytz-2012h-py2.7.egg

    即可然后执行命令

    sudo easy_install pytz-2012h-py2.7.egg

    就完成了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值