【发布时间】:2022-01-24 08:07:48
【问题描述】:
我在尝试更改没有 pytz 模块的日期时间对象的时区时遇到了一些问题。所以基本上我不需要使用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:\Users\sydea\AppData\Local\Programs\Python\Python39-32\lib\zoneinfo\_common.py", line 12, in load_tzdata
return importlib.resources.open_binary(package_name, resource_name)
File "C:\Users\sydea\AppData\Local\Programs\Python\Python39-32\lib\importlib\resources.py", line 88, in open_binary
package = _get_package(package)
File "C:\Users\sydea\AppData\Local\Programs\Python\Python39-32\lib\importlib\resources.py", line 49, in _get_package
module = _resolve(package)
File "C:\Users\sydea\AppData\Local\Programs\Python\Python39-32\lib\importlib\resources.py", line 40, in _resolve
return import_module(name)
File "C:\Users\sydea\AppData\Local\Programs\Python\Python39-32\lib\importlib\__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:\Users\sydea\Desktop\Cargadores solares\Proyecto\OCPP-1.6J-CS-I\pruebas.py", line 8, in <module>
SPAIN = ZoneInfo("America/Los_Angeles")
File "C:\Users\sydea\AppData\Local\Programs\Python\Python39-32\lib\zoneinfo\_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'
更新 我不知道这是否有帮助,但运行此代码:
import sysconfig
print(sysconfig.get_config_var("TZPATH"))
显示这条路径:
/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo
【问题讨论】:
-
您可以在该主机上使用的 Python 版本是什么? 3.9+ 有一个内置的
zoneinfo模块。 -
a way to parse ISO8601 with Z 表示 UTC 以了解日期时间,a way to convert 使用
zoneinfo(基本上只需使用 astimezone,因为你已经拥有它了)。 -
另外,“外部”究竟是什么意思?您通常可以在 .py 文件中包含整个 pytz 文件夹,您不需要像
pip这样的工具来“安装”它。只要你能上传 .py 文件,你可以添加任何你想要的模块,很少有例外。 -
你好@deceze,我使用的是python 3.9.5。当使用这样的 zoneinfo 模块时: from zoneinfo import ZoneInfo SPAIN = ZoneInfo("Europe/Madrid") 我收到以下错误:ibb.co/wNx0WbY。我无法上传任何文件,我只有一个可用于 python 脚本的编辑器,没有别的。
-
Sooo……你在那个奇怪的编辑器上能做什么? ??? docs.python.org/3/library/…
标签: python datetime timezone utc pytz