在不使用pytz的情况下将时区更改为datetime对象



我在尝试在没有pytz模块的情况下更改datetime对象的时区时遇到了一些问题。因此,基本上,我需要完全不使用pytz的代码:

def change_timezone(date: str, tz: str):
tz = pytz.timezone(tz)
date = datetime.datetime.strptime(date, "%Y-%m-%dT%H:%M:%SZ")
return date = date.replace(tzinfo=pytz.utc).astimezone(tz=tz)

我在一个外部平台上运行这个脚本,该平台不允许我使用外部Python模块,这就是我不能使用pytz的原因。

此函数的输入是一个包含UTC时区中的日期的字符串(例如:date = "2021-11-30T23:00:00Z"(和另一个指定日期应转换到的时区的字符串(如:tz = "Europe/Madrid"(。

有没有办法不使用pytz?

谢谢!

更新

使用zoneinfo模块时:

from zoneinfo import ZoneInfo
SPAIN = ZoneInfo("America/Los_Angeles")

我得到以下错误:

Traceback (most recent call last):
File "C:UserssydeaAppDataLocalProgramsPythonPython39-32libzoneinfo_common.py", line 12, in load_tzdata     
return importlib.resources.open_binary(package_name, resource_name)
File "C:UserssydeaAppDataLocalProgramsPythonPython39-32libimportlibresources.py", line 88, in open_binary  
package = _get_package(package)
File "C:UserssydeaAppDataLocalProgramsPythonPython39-32libimportlibresources.py", line 49, in _get_package 
module = _resolve(package)
File "C:UserssydeaAppDataLocalProgramsPythonPython39-32libimportlibresources.py", line 40, in _resolve     
return import_module(name)
File "C:UserssydeaAppDataLocalProgramsPythonPython39-32libimportlib__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 972, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 972, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 984, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'tzdata'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "c:UserssydeaDesktopCargadores solaresProyectoOCPP-1.6J-CS-Ipruebas.py", line 8, in <module>
SPAIN = ZoneInfo("America/Los_Angeles")
File "C:UserssydeaAppDataLocalProgramsPythonPython39-32libzoneinfo_common.py", line 24, in load_tzdata
raise ZoneInfoNotFoundError(f"No time zone found with key {key}")
zoneinfo._common.ZoneInfoNotFoundError: 'No time zone found with key America/Los_Angeles'

UPDATE我不知道这是否有帮助,但运行以下代码:

import sysconfig
print(sysconfig.get_config_var("TZPATH"))

显示以下路径:

/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo

使用dateutil:中的tz

from dateutil import tz
import datetime
start_date = datetime.datetime.strptime(str_datetime, "%Y-%m-%dT%H:%M:%SZ")
from_zone = tz.gettz('UTC')
to_zone = tz.gettz('Europe/Madrid')
start_date = start_date.replace(tzinfo = from_zone)
local = start_date.astimezone(to_zone)

最新更新