#29884: QuerySet.filter() with TruncBase functions not working as expected when USE_TZ= True -------------------------------------+------------------------------------- Reporter: slide333333 | Owner: Dan Davis Type: Bug | Status: assigned Component: Database layer | Version: 2.1 (models, ORM) | Severity: Normal | Resolution: Keywords: | Triage Stage: Accepted Has patch: 0 | Needs documentation: 0 Needs tests: 1 | Patch needs improvement: 0 Easy pickings: 0 | UI/UX: 0 -------------------------------------+------------------------------------- Changes (by Dan Davis):
* owner: nobody => Dan Davis * status: new => assigned * needs_tests: 0 => 1 * stage: Unreviewed => Accepted Comment: Only for PostgreSQL does Django use a timezone aware datetime: Oracle - data type DATE is not timezone aware. SQLite 3 - data type DATETIME is advisory and not a datetime at all, but is not timezone aware MySQL - data type DATETIME(6), stored in UTC but not timezone aware PostgreSQL - data type TIMESTAMP with TIMEZONE query generated by TimeStampModel.objects.annotate(day=TruncDay('timestamp', tzinfo=pytz.timezone('Europe/Berlin'))) is: MySQL {{{ SELECT `app_timestampmodel`.`id`, `app_timestampmodel`.`timestamp`, CAST(DATE_FORMAT(CONVERT_TZ(`app_timestampmodel`.`timestamp`, 'UTC', 'Europe/Berlin'), '%Y-%m-%d 00:00:00') AS DATETIME) AS `day` FROM `app_timestampmodel` }}} PostgreSQL {{{ SELECT "app_timestampmodel"."id", "app_timestampmodel"."timestamp", DATE_TRUNC('day', "app_timestampmodel"."timestamp" AT TIME ZONE 'Europe/Berlin') AS "day" FROM "app_timestampmodel" }}}l This makes the intent of Django clear: * Always return a datetime type * Do truncation after converting the datetime from database native (usually UTC) to the given timezone I've looked at the SQL produced for the filter query as well, and the DateTrunc doesn't work. -- Ticket URL: <https://code.djangoproject.com/ticket/29884#comment:7> Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-updates+unsubscr...@googlegroups.com. To post to this group, send email to django-updates@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/069.e9fe3d46e11592f9aa4c0c54b77a54ec%40djangoproject.com. For more options, visit https://groups.google.com/d/optout.