﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
30288	PostgreSQL connections forced into UTC if setting.USE_TZ is True.	chris-bradley	nobody	"`DatabaseWrapper.ensure_timezone()`  in `django/db/backends/postgresql/base.py` forces the database to use `self.timezone_name()` as its timezone. On the base class, `timezone_name()` uses the following logic:
 - Return `settings.TIME_ZONE` if `USE_TZ` is not truthy.
 - Return `self.settings_dict['TIME_ZONE']` if it is set.
 - Return 'UTC' otherwise.

However, `BaseDatabaseWrapper.check_settings()` prevents 'TIME_ZONE' from being set if the `supports_timezones` feature is set on the backend. The database's timezone is thus always set to 'UTC' for databases such as PostgreSQL if `USE_TZ` is set to True.

This creates problems if the database does anything involving the current date, which may be off by one from the Django's date. For instance, consider the following setup:
 - Model `X` points at a view.
 - `X` has a field named `age_in_days` that points to a column defined as `CURRENT_DATE - y`, where `y` is a date column.
 - The Django settings module has `USE_TZ` set to `True` and `TIME_ZONE` set to 'US/Eastern'.

`X.age_in_days` will then be one too high if viewed between 7:00 PM (8:00 PM if DST is in effect.) and midnight.

A solution that would not break backwards compatibility is to allow 'TIME_ZONE' to be set on a databases settings dictionary even if `supports_timezones` is set to True for the backend's features.

I have not checked if this is still an issue in later Django versions."	Bug	closed	Database layer (models, ORM)	1.11	Normal	duplicate			Unreviewed	0	0	0	0	0	0
