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

django, timezone

Solution

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)

Problem

I'm a bit confused by the daylight savings handling settings.py: ``` TIME_ZONE = 'Europe/London' USE_TZ = True ``` in the 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 ``` why are they not the same with respect to daylight savings? Both should be locale aware, no? I've read the docs but am none the wiser.

Original source

Related problems