正在解决一个问题,我必须评估时间戳 (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__
这里有更好的解决方案吗?
直接在所需的 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