Python处理带timezone的da

发布时间:2019-08-24 09:21:16编辑:auto阅读(1993)

    Python处理datetime类型的问题

    在存储时间类型到数据库的时候,通常使用DateTime类型。使用DateTime类型就会遇到时区timezone的问题。为了能够处理timezone, 推荐存数据库的使用存入的是基于UTC的时间日期,在本地取用的时候在转成本地时间。
    Python定义了抽象类tzinfo, 这个class不能直接使用。3.x版本(至少3.4, 3.5)定义了timezone class。但是这个timezone还是不如第三方pytz类好用。
    还有一个问题就是如何得到本机的timezone。在time class里面可以得到一个time.timezone, 是一个基于秒的offset值。注意这个time不是datetime.time, 就是time,用于os相关的时间信息。不是很好用,推荐tzlocal库。

    安装pytz和tzlocal

    使用pip安装就可以了。

    pip install pytz
    pip install tzlocal

    如何使用

    得到当前时间,用于数据的存储

    from datetime import datetime
    t = datetime.utcnow()

    已知本地时间,需要转成UTC时间用于存储

    import pytz
    from tzlocal import get_localzone
    tz = get_localzone()   #获得本地timezone
    utc = pytz.utc         #获得UTC timezone
    dt = datetime(2016, 6, 12, 5, 0, 0)
    loc_dt = tz.localize(dt) #将DateTime数据贴上timezone
    utc_dt = loc_dt.astimezone(utc)   #转换到新的timezone

    已知UTC时间,转本地

    import pytz
    from tzlocal import get_localzone
    utc = pytz.utc
    tz = get_localzone()
    t = datetime(x,x,x,x,x,x)
    utc_dt = utc.localize(t)
    loc_dt = utc_dt.astimezone(tz)

关键字