Python UTC 美东时间转换
我正在处理一个问题,需要判断一个时间戳(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