Django 1.4 timezone.now()与datetime.datetime.now()

2024-04-29 00:51:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我对日光节约的处理方式有点困惑

设置.py:

TIME_ZONE = 'Europe/London'
USE_TZ = True

在django shell中:

>>> from django.utils import timezone
>>> import datetime
>>> print timezone.now()
2012-05-28 11:19:42.897000+00:00
>>> print timezone.make_aware(datetime.datetime.now(),timezone.get_default_timez
one())
2012-05-28 12:20:03.224000+01:00

为什么他们在夏时制方面不一样?两者都应该有现场意识,不是吗?

我读过文件,但一点也不聪明。


Tags: djangopyimportzonedatetimetimeuse方式
3条回答

根据timezone.now()source

def now():
    """
    Returns an aware or naive datetime.datetime, depending on settings.USE_TZ.
    """
    if settings.USE_TZ:
        # timeit shows that datetime.now(tz=utc) is 24% slower
        return datetime.utcnow().replace(tzinfo=utc)
    else:
        return datetime.now()

它基于utc而不是默认时区。你可以通过使用

now = timezone.make_aware(datetime.datetime.now(),timezone.get_default_timezone())
print now.astimezone(timezone.utc)

自从Django 1.11以来,您可以简单地调用^{}来获取默认时区的datetime

>>> from django.utils import timezone
>>> timezone.localtime()

来自文档:

Converts an aware datetime to a different time zone, by default the current time zone.

When value is omitted, it defaults to now().

This function doesn’t work on naive datetimes; use make_aware() instead.

您可以将参数传递给datetime.datetime.now()

import pytz, datetime
utc = pytz.utc
utc_now = datetime.datetime.now(tz=utc)

或者使用timezone,a la:

from django.utils import timezone

now = timezone.now()

https://docs.djangoproject.com/en/2.1/topics/i18n/timezones/

相关问题 更多 >