【问题标题】:timedelta to 12 pm CETtimedelta 到欧洲中部时间下午 12 点
【发布时间】:2021-03-21 19:49:41
【问题描述】:

我正在尝试在本地时区未知的机器上将剩余时间设置为欧洲/柏林下午 12 点(GitHub 操作)。

我有一个函数应该返回一个时间增量,剩余时间到下午 12 点。

import datetime
import pytz

def get_twelve_pm():
    cest = pytz.timezone('Europe/Berlin')

    now = datetime.datetime.now(tz=cest)
    twelve_pm = datetime.datetime(
        now.year, now.month, now.day, 12).astimezone(cest)

    print(cest)
    print(now)
    print(twelve_pm)
    print(twelve_pm - now)

由于某种原因,在 GitHub 操作中,结果是:

欧洲/柏林

2020-12-10 12:15:46.446839+01:00

2020-12-10 13:00:00+01:00

0:44:13.553161

为什么会显示 13:00+01:00?我希望它像函数所说的那样说 12:00+01:00?

【问题讨论】:

    标签: python datetime timezone pytz


    【解决方案1】:

    您可以根据需要替换您的感知日期时间对象now 的属性,例如

    import datetime
    import pytz
    
    tz_Berlin = pytz.timezone('Europe/Berlin')
    now = datetime.datetime.now(tz=tz_Berlin)
    
    twelve_pm = now.replace(hour=12, minute=0, second=0, microsecond=0)
    # datetime.datetime(2020, 12, 10, 12, 0, tzinfo=<DstTzInfo 'Europe/Berlin' CET+1:00:00 STD>)
    

    或使用 localize 创建一个表示同一日期下午 12 点的日期时间对象(使用 pytz 的正确方法):

    twelve_pm = tz_Berlin.localize(datetime.datetime(now.year, now.month, now.day, 12))
    # datetime.datetime(2020, 12, 10, 12, 0, tzinfo=<DstTzInfo 'Europe/Berlin' CET+1:00:00 STD>)
    

    ...或者使用 Python 3.9 的 zoneinfo 直接设置 tzinfo:

    from zoneinfo import ZoneInfo
    
    tz_Berlin = ZoneInfo('Europe/Berlin')
    twelve_pm = datetime.datetime(now.year, now.month, now.day, 12, tzinfo=tz_Berlin)
    # datetime.datetime(2020, 12, 10, 12, 0, tzinfo=zoneinfo.ZoneInfo(key='Europe/Berlin'))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-16
      • 1970-01-01
      相关资源
      最近更新 更多