Opened 3 years ago

Closed 3 years ago

Last modified 3 years ago

#20693 closed New feature (fixed)

Add timezone support to built-in time filter

Reported by: warren@… Owned by: wsmith323
Component: Template system Version: master
Severity: Normal Keywords:
Cc: warren@… Triage Stage: Ready for checkin
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no


Currently, the built-in time template filter does not support timezone, even if timezone information is present on the time or datetime object that is passed to it.

The built-in date filter DOES support timezone if passed a datetime object, so this is often used as a workaround. However, when attempting to use the DATE_FORMAT and TIME_FORMAT settings in conjunction with naked {{ value|date }} and {{ value|time }} template expressions to get consistent date and time formatting across a site, the lack of timezone support in the time filter is a problem if timezone information needs to be displayed after the time.

There is a discussion of this issue on the Django Developers list:!topic/django-developers/r-7dMZROTs4

The consensus so far seems to be to modify the django.utils.dateformat.TimeFormat class so that it has similar timezone support for datetime objects as does the DateFormat class in the same module. Since DateFormat is a subclass of TimeFormat, it is likely that the timezone support methods can just be moved from DateFormat into TimeFormat, along with the init() method.

Some modification to the methods will need to occur to account for the case where a time object (not a datetime object) is passed to a filter with a timezone-related format specifier. It was decided in the discussion that the behavior in this case should be that the format method will return an empty string.

Change History (10)

comment:1 Changed 3 years ago by wsmith323

  • Needs documentation unset
  • Needs tests unset
  • Owner changed from nobody to wsmith323
  • Patch needs improvement unset
  • Status changed from new to assigned

comment:2 Changed 3 years ago by wsmith323

I have the code modified. I'm working on adding tests and tweaking the documentation.

comment:3 Changed 3 years ago by wsmith323

  • Summary changed from Add timezone support to built-in time template filter to Add timezone support to built-in time filter

I've added tests and have them all passing under SQLite. I don't think I need to test under additional dbs, since this is primarily a template change.

However, since the generic django time formatting behavior is changing slightly (assumption on my part given the location of my changes), I suppose it is possible that there might be some weird db-specific regression or subtle unexpected behavior change that will bite folks.

I've submitted

Version 0, edited 3 years ago by wsmith323 (next)

comment:4 Changed 3 years ago by wsmith323

  • Has patch set

comment:5 Changed 3 years ago by wsmith323

  • Triage Stage changed from Unreviewed to Accepted

comment:6 Changed 3 years ago by wsmith323

  • Version changed from 1.5 to master

comment:7 Changed 3 years ago by estebistec

  • Triage Stage changed from Accepted to Ready for checkin

Ready for checkin/final review by core dev.

comment:8 Changed 3 years ago by anonymous

I have re-based my local branch so the pull-request looks clean against the current master. Not sure what else to do.

comment:9 Changed 3 years ago by Warren Smith <warren@…>

  • Resolution set to fixed
  • Status changed from assigned to closed

In dd3a883894a219bc6c69e556c694734ab82b33e9:

Fixed #20693 -- Add timezone support to built-in time filter.

Modified django.utils.dateformat module, moving init() method and
timezone-related format methods from DateFormat class to TimeFormat
base class. Modified timezone-related format methods to return an
empty string when timezone is inappropriate for input value.

comment:10 Changed 3 years ago by Ramiro Morales <cramm0@…>

In bebb449ac334d7365a015b34b9c894dc4bf63f7f:

Added docs for changes in commit dd3a883894.

Refs #20693.

Note: See TracTickets for help on using tickets.
Back to Top