Python UTC 美东时间转换

0 投票
1 回答
60 浏览
提问于 2025-04-14 15:55

我正在处理一个问题,需要判断一个时间戳(UTC时间)是否超过了晚上7点(Americas/New_York时区)。

我最开始的检查方法很简单:

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

但这个方法在夏令时(东部标准时间/东部夏令时间)的时候显然不管用。

我觉得这个方法可以用,但总觉得不太对。

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__

有没有更好的解决办法呢?

1 个回答

3

直接在你想要的时区里工作会简单得多,而不是去纠结时间差和夏令时的问题,这样做基本上只会让人头疼,没有其他好处:

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 了。正如 @FObersteiner 在上面的评论中提到的,这样也能让你避免 使用 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

撰写回答