Django 替换“;tzinfo“;并用localtime打印修改6分钟

Django 替换“;tzinfo“;并用localtime打印修改6分钟,django,python-3.x,django-models,python-datetime,django-timezone,Django,Python 3.x,Django Models,Python Datetime,Django Timezone,我正在创建一个无时区的DataTimeField。很快我“手动”编辑了这个TZ,然后要求用本地TZ读取值。看最后结果修正六分钟 逻辑: >>> import datetime >>> from django.utils import timezone >>> test = datetime.datetime(2016, 9, 28, 10, 10, 10) datetime.datetime(2016, 9, 28, 10, 10, 10)

我正在创建一个无时区的DataTimeField。很快我“手动”编辑了这个TZ,然后要求用本地TZ读取值。看最后结果修正六分钟

逻辑:

>>> import datetime
>>> from django.utils import timezone
>>> test = datetime.datetime(2016, 9, 28, 10, 10, 10)
datetime.datetime(2016, 9, 28, 10, 10, 10)

>>> test = teste.replace(tzinfo=pytz.timezone('America/Sao_Paulo'))
datetime.datetime(2016, 9, 28, 10, 10, 10, tzinfo=<DstTzInfo 'America/Sao_Paulo' LMT-1 day, 20:54:00 STD>)

>>> timezone.activate(pytz.timezone('America/Sao_Paulo'))
>>> timezone.localtime(test)
datetime.datetime(2016, 9, 28, 10, 16, 10, tzinfo=<DstTzInfo 'America/Sao_Paulo' BRT-1 day, 21:00:00 STD>)
Replace tzinfo=None,我保证您不会出现以下错误:

非原始日期时间(tzinfo已设置)


使用timezone.localize而不是datetime.replace

>>> test = datetime.datetime(2016, 9, 28, 10, 10, 10)
>>> test = pytz.timezone('America/Sao_Paulo').localize(test)
datetime.datetime(2016, 9, 28, 10, 10, 10, tzinfo=<DstTzInfo 'America/Sao_Paulo' BRT-1 day, 21:00:00 STD>)

>>> timezone.activate(pytz.timezone('America/Sao_Paulo'))
>>> timezone.localtime(test)
datetime.datetime(2016, 9, 28, 10, 10, 10, tzinfo=<DstTzInfo 'America/Sao_Paulo' BRT-1 day, 21:00:00 STD>)
>test=datetime.datetime(2016,9,28,10,10,10)
>>>测试=pytz.时区(“美国/圣保罗”)。本地化(测试)
datetime.datetime(2016,9,28,10,10,10,tzinfo=)
>>>时区.激活(pytz.时区('美国/圣保罗'))
>>>时区。本地时间(测试)
datetime.datetime(2016,9,28,10,10,10,tzinfo=)
参考:


  • 太好了,非常感谢。最后一个问题:设置时区是全局性的还是限制了请求?(我希望这是第二种选择)它应该是无国籍的,即第二种。
    >>> test = datetime.datetime(2016, 9, 28, 10, 10, 10)
    >>> test = pytz.timezone('America/Sao_Paulo').localize(test)
    datetime.datetime(2016, 9, 28, 10, 10, 10, tzinfo=<DstTzInfo 'America/Sao_Paulo' BRT-1 day, 21:00:00 STD>)
    
    >>> timezone.activate(pytz.timezone('America/Sao_Paulo'))
    >>> timezone.localtime(test)
    datetime.datetime(2016, 9, 28, 10, 10, 10, tzinfo=<DstTzInfo 'America/Sao_Paulo' BRT-1 day, 21:00:00 STD>)