diff --git a/django/conf/__init__.py b/django/conf/__init__.py index 24bcd40973..d94f6e9867 100644 --- a/django/conf/__init__.py +++ b/django/conf/__init__.py @@ -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 diff --git a/django/conf/project_template/settings.py b/django/conf/project_template/settings.py index 361a36b36b..ee08e9712b 100644 --- a/django/conf/project_template/settings.py +++ b/django/conf/project_template/settings.py @@ -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' diff --git a/django/db/backends/postgresql/base.py b/django/db/backends/postgresql/base.py index 500ba5ce03..ec59dd6848 100644 --- a/django/db/backends/postgresql/base.py +++ b/django/db/backends/postgresql/base.py @@ -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.") diff --git a/django/db/backends/postgresql_psycopg2/base.py b/django/db/backends/postgresql_psycopg2/base.py index b6823f2303..09b9eb4990 100644 --- a/django/db/backends/postgresql_psycopg2/base.py +++ b/django/db/backends/postgresql_psycopg2/base.py @@ -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.") diff --git a/docs/ref/settings.txt b/docs/ref/settings.txt index 0601e21ab7..9621ec5b12 100644 --- a/docs/ref/settings.txt +++ b/docs/ref/settings.txt @@ -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 -`, 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 + `, 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 diff --git a/tests/regressiontests/app_loading/tests.py b/tests/regressiontests/app_loading/tests.py index 683c6079ad..a1273dfeb0 100644 --- a/tests/regressiontests/app_loading/tests.py +++ b/tests/regressiontests/app_loading/tests.py @@ -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()