Python UTC 美国/纽约时间转换

问题描述 投票:0回答:1

正在解决一个问题,我必须评估时间戳 (UTC) 是否超过晚上 7 点

Americas/New_York

我天真地做了检查:

if (timestamp - timedelta(hours=4)).time() > 19: 
    __logic__

夏令时 EST/EDT 显然失败了。

我认为这可行,但感觉不对。

EST = pytz.timezone('America/New_York')
biz_end = datetime(1990, 1, 1, 19, tzinfo=EST).astimezone(pytz.utc).hour

if timestamp.time() > biz_end: 
    __logic__

这里有更好的解决方案吗?

python datetime utc pytz
1个回答
0
投票

直接在所需的 TZ 工作应该要简单得多,而不是与时差和 DST 作斗争,因为这只会增加头痛,而且没有其他好处:

import pytz
from datetime import datetime, time

# Get the UTC timestamp and convert to target TZ
timestamp_utc = datetime.utcnow().replace(tzinfo=pytz.utc)  
timestamp_ny = timestamp_utc.astimezone(pytz.timezone('America/New_York'))

if timestamp_ny.time() > time(19, 0):
    # It's past 7PM...
    pass

此外,如果您仅将

pytz
用于此目的,则可以使用 Python 3.9+ 内置库并删除
pytz
依赖项:

from datetime import datetime, time
from zoneinfo import ZoneInfo

timestamp_utc = datetime.now(timezone.utc)
timestamp_ny = timestamp_utc.astimezone(ZoneInfo('America/New_York'))

if timestamp_ny.time() > time(19, 0):
    pass
© www.soinside.com 2019 - 2024. All rights reserved.