Fixed #1480 -- Added the ability to use the system timezone. Thanks to Ramiro Morales for the patch.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@12602 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Russell Keith-Magee 2010-02-26 15:33:27 +00:00
parent 0ff624a3cb
commit 46cc7021a8
6 changed files with 38 additions and 22 deletions

View File

@ -102,7 +102,7 @@ class Settings(object):
new_installed_apps.append(app) new_installed_apps.append(app)
self.INSTALLED_APPS = new_installed_apps self.INSTALLED_APPS = new_installed_apps
if hasattr(time, 'tzset'): if hasattr(time, 'tzset') and getattr(self, 'TIME_ZONE'):
# Move the time zone info into os.environ. See ticket #2315 for why # Move the time zone info into os.environ. See ticket #2315 for why
# we don't do this unconditionally (breaks Windows). # we don't do this unconditionally (breaks Windows).
os.environ['TZ'] = self.TIME_ZONE os.environ['TZ'] = self.TIME_ZONE

View File

@ -23,6 +23,8 @@ DATABASES = {
# Local time zone for this installation. Choices can be found here: # Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems. # although not all choices may be available on all operating systems.
# On Unix systems, a value of None will cause Django to use the same
# timezone as the operating system.
# If running in a Windows environment this must be set to the same as your # If running in a Windows environment this must be set to the same as your
# system time zone. # system time zone.
TIME_ZONE = 'America/Chicago' TIME_ZONE = 'America/Chicago'

View File

@ -119,7 +119,7 @@ class DatabaseWrapper(BaseDatabaseWrapper):
set_tz = False set_tz = False
settings_dict = self.settings_dict settings_dict = self.settings_dict
if self.connection is None: if self.connection is None:
set_tz = True set_tz = settings_dict.get('TIME_ZONE')
if settings_dict['NAME'] == '': if settings_dict['NAME'] == '':
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured
raise ImproperlyConfigured("You need to specify NAME in your Django settings file.") raise ImproperlyConfigured("You need to specify NAME in your Django settings file.")

View File

@ -113,7 +113,7 @@ class DatabaseWrapper(BaseDatabaseWrapper):
set_tz = False set_tz = False
settings_dict = self.settings_dict settings_dict = self.settings_dict
if self.connection is None: if self.connection is None:
set_tz = True set_tz = settings_dict.get('TIME_ZONE')
if settings_dict['NAME'] == '': if settings_dict['NAME'] == '':
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured
raise ImproperlyConfigured("You need to specify NAME in your Django settings file.") raise ImproperlyConfigured("You need to specify NAME in your Django settings file.")

View File

@ -1505,28 +1505,42 @@ TIME_ZONE
Default: ``'America/Chicago'`` Default: ``'America/Chicago'``
A string representing the time zone for this installation. `See available choices`_. .. versionchanged:: 1.2
(Note that list of available choices lists more than one on the same line; ``None`` was added as an allowed value.
you'll want to use just one of the choices for a given time zone. For instance,
one line says ``'Europe/London GB GB-Eire'``, but you should use the first bit
of that -- ``'Europe/London'`` -- as your ``TIME_ZONE`` setting.)
Note that this is the time zone to which Django will convert all dates/times -- A string representing the time zone for this installation, or
not necessarily the timezone of the server. For example, one server may serve ``None``. `See available choices`_. (Note that list of available
multiple Django-powered sites, each with a separate time-zone setting. choices lists more than one on the same line; you'll want to use just
one of the choices for a given time zone. For instance, one line says
``'Europe/London GB GB-Eire'``, but you should use the first bit of
that -- ``'Europe/London'`` -- as your ``TIME_ZONE`` setting.)
Normally, Django sets the ``os.environ['TZ']`` variable to the time zone you Note that this is the time zone to which Django will convert all
specify in the ``TIME_ZONE`` setting. Thus, all your views and models will dates/times -- not necessarily the timezone of the server. For
automatically operate in the correct time zone. However, if you're manually example, one server may serve multiple Django-powered sites, each with
a separate time-zone setting.
Normally, Django sets the ``os.environ['TZ']`` variable to the time
zone you specify in the ``TIME_ZONE`` setting. Thus, all your views
and models will automatically operate in the correct time zone.
However, Django won't set the ``TZ`` environment variable under the
following conditions:
* If you're using the manual configuration option as described in
:ref:`manually configuring settings :ref:`manually configuring settings
<settings-without-django-settings-module>`, Django will *not* touch the ``TZ`` <settings-without-django-settings-module>`, or
environment variable, and it'll be up to you to ensure your processes are
running in the correct environment. * If you specify ``TIME_ZONE = None``. This will cause Django to fall
back to using the system timezone.
If Django doesn't set the ``TZ`` environment variable, it's up to you
to ensure your processes are running in the correct environment.
.. note:: .. note::
Django cannot reliably use alternate time zones in a Windows environment. Django cannot reliably use alternate time zones in a Windows
If you're running Django on Windows, this variable must be set to match the environment. If you're running Django on Windows, this variable
system timezone. must be set to match the system timezone.
.. _See available choices: http://www.postgresql.org/docs/8.1/static/datetime-keywords.html#DATETIME-TIMEZONE-SET-TABLE .. _See available choices: http://www.postgresql.org/docs/8.1/static/datetime-keywords.html#DATETIME-TIMEZONE-SET-TABLE

View File

@ -19,7 +19,7 @@ Test the globbing of INSTALLED_APPS.
>>> sys.path = old_sys_path >>> sys.path = old_sys_path
# Undo a side-effect of installing a new settings object. # Undo a side-effect of installing a new settings object.
>>> if hasattr(time, "tzset"): >>> if hasattr(time, "tzset") and old_tz:
... os.environ["TZ"] = old_tz ... os.environ["TZ"] = old_tz
... time.tzset() ... time.tzset()