Opened 5 years ago

Closed 5 years ago

Last modified 4 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: UI/UX:

Description

In settings I put
TIME_INPUT_FORMATS = ('%I:%M %P',)
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 5 years ago by Bufke <dmbst32@…>

  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset

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

comment:2 Changed 5 years ago by kmtracey

I am not sure %P is supposed to work as an input format. Doc here: http://docs.djangoproject.com/en/dev/ref/settings/#time-input-formats 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: http://docs.python.org/library/datetime.html#strftime-and-strptime-behavior, 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 5 years ago by russellm

  • Resolution set to invalid
  • Status changed from new to closed

%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 5 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'
TIME_INPUT_FORMATS = ('%I:%M %p',)

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 5 years ago by jmil

  • Resolution invalid deleted
  • Status changed from closed to reopened

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 5 years ago by russellm

  • milestone set to 1.2
  • Triage Stage changed from Unreviewed to Accepted

comment:7 Changed 5 years ago by russellm

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

(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 4 years ago by jacob

  • milestone 1.2 deleted

Milestone 1.2 deleted

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