在Python3.8中,JST时间转换花费了令人难以置信的时间

在Python3.8中,JST时间转换花费了令人难以置信的时间,python,datetime,timezone,Python,Datetime,Timezone,我是python新手,我有一个将UTC转换为JST的要求,但我也注意到将UTC转换为JST的代码花费的时间比预期的要长 等待5-7秒。仅针对时区转换性能不好的问题,以下是我正在使用的代码: self._to_timestamp = datetime.now(timezone(UTC)).astimezone(timezone(JST)).replace(microsecond=0, second=0, minute=0) 我相信我在转换过程中犯了一个错误,如果有人能发现这个问题,我们将不胜感激

我是python新手,我有一个将UTC转换为JST的要求,但我也注意到将UTC转换为JST的代码花费的时间比预期的要长

等待5-7秒。仅针对时区转换性能不好的问题,以下是我正在使用的代码:

self._to_timestamp = datetime.now(timezone(UTC)).astimezone(timezone(JST)).replace(microsecond=0, second=0, minute=0)

我相信我在转换过程中犯了一个错误,如果有人能发现这个问题,我们将不胜感激。

如何获得时区设置?我建议

from datetime import datetime, timezone
from dateutil.tz import gettz
from backports.zoneinfo import ZoneInfo # Python 3.9: just zoneinfo

UTC = timezone.utc
JST = gettz('Asia/Tokyo')
JST_z = ZoneInfo('Asia/Tokyo')

dt = datetime.now(UTC).astimezone(JST).replace(microsecond=0, second=0, minute=0)
# datetime.datetime(2020, 11, 24, 19, 0, tzinfo=tzfile('Japan'))
…在我的机器上运行相对较快

%timeit datetime.now(UTC).astimezone(JST).replace(microsecond=0, second=0, minute=0)
9.66 µs ± 415 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

%timeit datetime.now(UTC).astimezone(JST_z).replace(microsecond=0, second=0, minute=0)
2.18 µs ± 143 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

Windows 10上的Python 3.8.5 x64

我正在使用pytz导入时区中的
来获取时区。@vishwas:好的,虽然我建议不要再使用pytz,因为Python 3.9的发行版不推荐使用它,但这应该也可以。那么您的代码中的
UTC
JST
是什么?它们只是字符串,
UTC=“UTC”
JST=“亚洲/东京”
@vishwas:好的,谢谢您提供的信息。如果我在pytz.timezone上运行它,大约需要6µs,因此在使用dateutil(最慢)和使用zoneinfo(最快)的选项之间。你试过运行我的代码吗?您需要一个IPython控制台来调用
%timeit
。但无论如何都不需要几秒钟。