django 1.4 timezone.now() vs datetime.datetime.now() django 1.4 timezone.now() vs datetime.datetime.now() django django

django 1.4 timezone.now() vs datetime.datetime.now()


According to 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()

It's based on utc instead of your default timezone. You could achieve same value by using

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


Since Django 1.11 you can simply call django.utils.timezone.localtime to fetch datetime for your default timezone.

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

From docs:

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.


You can pass a param to datetime.datetime.now():

import pytz, datetimeutc = pytz.utcutc_now = datetime.datetime.now(tz=utc)

Or use timezone, a la:

from django.utils import timezonenow = timezone.now()

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