pytz https://pytz.sourceforge.net/用于Django 版本: 选择当前时区 https://docs.djangoproject.com/en/3.2/topics/i18n/timezones/#selecting-the-current-time-zone如下所示:
import pytz # Here
from django.utils import timezone
class TimezoneMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
tzname = request.session.get('django_timezone')
if tzname:
timezone.activate(pytz.timezone(tzname))
else:
timezone.deactivate()
return self.get_response(request)
But, zoneinfo https://docs.python.org/3/library/zoneinfo.html被用来代替pytz
in Django 版本:4.0 选择当前时区 https://docs.djangoproject.com/en/4.0/topics/i18n/timezones/#selecting-the-current-time-zone如下所示:
import zoneinfo # Here
from django.utils import timezone
class TimezoneMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
tzname = request.session.get('django_timezone')
if tzname:
timezone.activate(zoneinfo.ZoneInfo(tzname))
else:
timezone.deactivate()
return self.get_response(request)
我的问题:
- Is
pytz
现在或将来在 Python 中已弃用吗?
- 为什么不是
pytz
用于Django 版本:4.0 选择当前时区 https://docs.djangoproject.com/en/4.0/topics/i18n/timezones/#selecting-the-current-time-zone?
去引用pytz的自述文件 https://github.com/stub42/pytz/blob/master/src/README.rst#issues--limitations:
该项目正处于维护模式。使用 Python 3.9 或更高版本的项目最好通过使用现在包含在核心 Python 和与之配合使用的包(例如 tzdata)中的时区功能来服务。
如果不使用字面意思“已弃用”,则包维护者建议您不要使用pytz
对于新项目,因此这实际上是对所有意图和目的的弃用。
所以 Django 的策略与此一致,事实上 Django 更进一步,通过促进使用zoneinfo
Python 3.8(仍受支持的最旧的 Python 版本)。从您引用的 Django 4.0 文档 https://docs.djangoproject.com/en/4.0/topics/i18n/timezones/#selecting-the-current-time-zone:
时区支持使用zoneinfo
,它是 Python 3.9 中 Python 标准库的一部分。这backports.zoneinfo
如果您使用的是 Python 3.8,该软件包会自动与 Django 一起安装。
and
Django 4.0 中的更改:zoneinfo
被设为默认时区实现。您可以继续使用pytz
在 4.x 发布周期期间通过USE_DEPRECATED_PYTZ
环境。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)