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)
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
# we don't do this unconditionally (breaks Windows).
os.environ['TZ'] = self.TIME_ZONE

View File

@ -23,6 +23,8 @@ DATABASES = {
# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# 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
# system time zone.
TIME_ZONE = 'America/Chicago'

View File

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

View File

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

View File

@ -1505,28 +1505,42 @@ TIME_ZONE
Default: ``'America/Chicago'``
A string representing the time zone for this installation. `See available choices`_.
(Note that list of available 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.)
.. versionchanged:: 1.2
``None`` was added as an allowed value.
Note that this is the time zone to which Django will convert all dates/times --
not necessarily the timezone of the server. For example, one server may serve
multiple Django-powered sites, each with a separate time-zone setting.
A string representing the time zone for this installation, or
``None``. `See available choices`_. (Note that list of available
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
specify in the ``TIME_ZONE`` setting. Thus, all your views and models will
automatically operate in the correct time zone. However, if you're manually
:ref:`manually configuring settings
<settings-without-django-settings-module>`, Django will *not* touch the ``TZ``
environment variable, and it'll be up to you to ensure your processes are
running in the correct environment.
Note that this is the time zone to which Django will convert all
dates/times -- not necessarily the timezone of the server. For
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
<settings-without-django-settings-module>`, or
* 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::
Django cannot reliably use alternate time zones in a Windows environment.
If you're running Django on Windows, this variable must be set to match the
system timezone.
Django cannot reliably use alternate time zones in a Windows
environment. If you're running Django on Windows, this variable
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

View File

@ -19,7 +19,7 @@ Test the globbing of INSTALLED_APPS.
>>> sys.path = old_sys_path
# 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
... time.tzset()