开发者社区> 问答> 正文

结合时区的日期操作

你有一个安排在2012年12月21日早上9:30的电话会议,地点在芝加哥。 而你的朋友在印度的班加罗尔,那么他应该在当地时间几点参加这个会议呢?

展开
收起
哦哦喔 2020-04-16 21:18:20 1144 0
1 条回答
写回答
取消 提交回答
  • 对几乎所有涉及到时区的问题,你都应该使用 pytz 模块。这个包提供了Olson时区数据库, 它是时区信息的事实上的标准,在很多语言和操作系统里面都可以找到。
    
    pytz 模块一个主要用途是将 datetime 库创建的简单日期对象本地化。 比如,下面如何表示一个芝加哥时间的示例:
    
    >>> from datetime import datetime
    >>> from pytz import timezone
    >>> d = datetime(2012, 12, 21, 9, 30, 0)
    >>> print(d)
    2012-12-21 09:30:00
    >>>
    
    >>> # Localize the date for Chicago
    >>> central = timezone('US/Central')
    >>> loc_d = central.localize(d)
    >>> print(loc_d)
    2012-12-21 09:30:00-06:00
    >>>
    一旦日期被本地化了, 它就可以转换为其他时区的时间了。 为了得到班加罗尔对应的时间,你可以这样做:
    
    >>> # Convert to Bangalore time
    >>> bang_d = loc_d.astimezone(timezone('Asia/Kolkata'))
    >>> print(bang_d)
    2012-12-21 21:00:00+05:30
    >>>
    如果你打算在本地化日期上执行计算,你需要特别注意夏令时转换和其他细节。 比如,在2013年,美国标准夏令时时间开始于本地时间3月13日凌晨2:00(在那时,时间向前跳过一小时)。 如果你正在执行本地计算,你会得到一个错误。比如:
    
    >>> d = datetime(2013, 3, 10, 1, 45)
    >>> loc_d = central.localize(d)
    >>> print(loc_d)
    2013-03-10 01:45:00-06:00
    >>> later = loc_d + timedelta(minutes=30)
    >>> print(later)
    2013-03-10 02:15:00-06:00 # WRONG! WRONG!
    >>>
    结果错误是因为它并没有考虑在本地时间中有一小时的跳跃。 为了修正这个错误,可以使用时区对象 normalize() 方法。比如:
    
    >>> from datetime import timedelta
    >>> later = central.normalize(loc_d + timedelta(minutes=30))
    >>> print(later)
    2013-03-10 03:15:00-05:00
    >>>
    
    2020-04-16 21:18:36
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载