65

我对夏令时处理有点困惑

设置.py:

TIME_ZONE = 'Europe/London'
USE_TZ = True

在 Django 外壳中:

>>> 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

为什么它们在夏令时方面不一样?两者都应该知道语言环境,不是吗?

我已经阅读了文档,但并不明智。

4

5 回答 5

89

根据timezone.now() 消息来源

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)
于 2012-05-28T12:11:53.737 回答
32

从 Django 1.11 开始,您可以简单地调用django.utils.timezone.localtime来获取datetime您的默认时区。

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

来自文档:

将感知日期时间转换为不同的时区,默认为当前时区。

省略 value 时,默认为now().

此功能不适用于幼稚的日期时间;改为使用make_aware()

于 2018-03-20T21:13:50.863 回答
5

您可以将参数传递给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/

于 2019-03-12T03:09:41.570 回答
0
from datetime import datetime
from django.utils import timezone

def now():
    try:
        return timezone.localtime(timezone.now()).strftime('%Y-%m-%dT%H:%M:%S')

    except Exception as exp:
        print('TimeZone is not set - {}'.format(exp))
        return datetime.now().strftime('%Y-%m-%dT%H:%M:%S')

如果您在 Django 设置中进行设置,您将放置在该TIME_ZONE = 'Europe/London'部分中,否则,将放置在该部分中。USE_TZ = Truetryexcept


[注意]:

  • .strftime()是一个选项
于 2018-06-10T10:33:55.403 回答
-1
from datetime import datetime
from pytz import timezone

# one can get any time for respective timezone
current_time = datetime.now(timezone('Asia/Kolkata'))
print("time in india :", current_time)
于 2021-09-06T18:42:30.293 回答