本文介绍了Python-从DST调整的本地时间到UTC的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

一家特定的银行在世界所有主要城市都设有分支机构。它们都在当地时间上午10:00开放。如果在使用DST的时区内,那么本地打开时间当然也要遵循DST调整的时间。那么我该如何从当地时间转到UTC时间。

A specific bank has branches in all major cities in the world. They all open at 10:00 AM local time. If within a timezone that uses DST, then of course the local opening time also follows the DST-adjusted time. So how do I go from the local time to the utc time.

我需要的是一个函数 to_utc(localdt,tz)像这样:

What I need is a function to_utc(localdt, tz) like this:

参数:


  • localdt:本地时间,作为朴素的日期时间对象,经过DST调整

  • tz:TZ格式的时区,例如'欧洲/柏林'

返回值:


  • datetime对象,在UTC中,可识别时区

编辑:

最大的挑战是检测本地时间是否在夏令时期间,这也意味着已调整夏令时。

The biggest challenge is to detect whether the local time is in a period with DST, which also means that it is DST adjusted.

对于夏季拥有+1 DST的欧洲/柏林:

For 'Europe/Berlin' which has +1 DST in the summer:


  • 1月1日10:00 => 1月1日9:00 UTC

  • 7月1日10:00 => 7月1日8:00 UTC

对于没有DST的非洲/拉各斯:

For 'Africa/Lagos' which has no DST:


  • 1月1日10:00 => 1月1日9:00 UTC

  • 7月1日10:00 => 7月1日9:00 UTC

推荐答案

使用,尤其是其:

import pytz
import datetime as dt

def to_utc(localdt,tz):
    timezone=pytz.timezone(tz)
    utc=pytz.utc
    return timezone.localize(localdt).astimezone(utc)

if __name__=='__main__':
    for tz in ('Europe/Berlin','Africa/Lagos'):
        for date in (dt.datetime(2011,1,1,10,0,0),
                 dt.datetime(2011,7,1,10,0,0),
                 ):
            print('{tz:15} {l} --> {u}'.format(
                tz=tz,
                l=date.strftime('%b %d %H:%M'),
                u=to_utc(date,tz).strftime('%b %d %H:%M %Z')))

收益

Europe/Berlin   Jan 01 10:00 --> Jan 01 09:00 UTC
Europe/Berlin   Jul 01 10:00 --> Jul 01 08:00 UTC
Africa/Lagos    Jan 01 10:00 --> Jan 01 09:00 UTC
Africa/Lagos    Jul 01 10:00 --> Jul 01 09:00 UTC

这篇关于Python-从DST调整的本地时间到UTC的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-10 10:58