Opened 9 years ago

Closed 9 years ago

Last modified 7 years ago

#13486 closed (fixed)

TIME_INPUT_FORMATS %P doesn't work

Reported by: Bufke <dmbst32@…> Owned by: nobody
Component: Uncategorized Version: 1.2-beta
Severity: Keywords:
Cc: Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no


In settings I put
Which should display times like 8:30 PM
It displays times fine but on saving it raises validation errors. Also when hitting the "now" button in the admin interface it displays what should be PM or AM as undefined. I'm running 1.2 RC 1

Change History (8)

comment:1 Changed 9 years ago by Bufke <dmbst32@…>

Oh just a note and workaround it only seems to effect %P not %p so this works fine
('%I:%M %p',)

comment:2 Changed 9 years ago by Karen Tracey

I am not sure %P is supposed to work as an input format. Doc here: notes that "these format strings are specified in Python's datetime module syntax, that is different from the one used by Django for formatting dates to be displayed". I don't see, %P listed in the Python datetime table here:, just %p.

However I do see a problem in attempting to use the input format "I%:%M %p". When I click "Now" in the admin, or select Now from the "Choose a time" dropdown, I get the time in GMT, that is 4 hours ahead of my local time. Using the default input formats clicking either of these Now options gives me now in local time.

comment:3 Changed 9 years ago by Russell Keith-Magee

Resolution: invalid
Status: newclosed

%P isn't a valid formatting character, %p is. Hence the failure. Closing invalid.

As for Karen's reported problem: I couldn't reproduce this, and speaking with Karen on IRC, she couldn't reproduce her earlier failure.

comment:4 Changed 9 years ago by Bufke <dmbst32@…>

Hmm I was looking at the times I get when clicking "now".
At 2:21 PM when I click "now" I get 10:21 PM. Strange.

Here is from my settings

TIME_ZONE = 'America/New York'

My computer is in the same time zone. Now when I delete TIME_INPUT_FORMATS It displays correctly, although in 24 hour time. Could this be a bug?

Here are the other settings I get from clicking on the admin widget
Midnight: 00:00 AM Shouldn't it be 12:00 AM Python Doc says for %I "Hour (12-hour clock) as a decimal number [01,12]." so 00 should never come up right?

  1. a.m. is correct

noon is correct as 12:00 PM

comment:5 Changed 9 years ago by jmil

Resolution: invalid
Status: closedreopened

The "Now" problem is caused by Date.prototype.getTwelveHours in core.js. The formula for converting a 24-hour time to a 12-hour time, provided it's 1 pm or later, is the 24-hour time minus 12 hours, i.e.

Date.prototype.getTwelveHours = function() {
    return (this.getHours() <= 12) ? this.getHours() : this.getHours() - 12;

Currently, we have:

Date.prototype.getTwelveHours = function() {
    return (this.getHours() <= 12) ? this.getHours() : 24 - this.getHours();

Also, getHours() returns a value from 0-23, so we should consider checking for zero and replacing it with twelve. I couldn't think of a clever way to do this, though; nested inline conditionals seem ugly to me.

comment:6 Changed 9 years ago by Russell Keith-Magee

milestone: 1.2
Triage Stage: UnreviewedAccepted

comment:7 Changed 9 years ago by Russell Keith-Magee

Resolution: fixed
Status: reopenedclosed

(In [13239]) Fixed #13486 -- Corrected handling of %I in admin javascript version of strftime. Thanks to Bufke for the report, and jmil for the solution.

comment:8 Changed 7 years ago by Jacob

milestone: 1.2

Milestone 1.2 deleted

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