# HG changeset patch # User cmlenz # Date 1188462870 0 # Node ID e4c88f51a583f583c65704e36e969268cbe1b9a9 # Parent 726791865a5e66996b051068807ae18cdf6c4c8e Merged [301:303] from [source:trunk] via svnmerge. diff --git a/babel/dates.py b/babel/dates.py --- a/babel/dates.py +++ b/babel/dates.py @@ -706,13 +706,19 @@ elif char == 'a': return self.format_period(char) elif char == 'h': - return self.format(self.value.hour % 12, num) + if self.value.hour % 12 == 0: + return self.format(12, num) + else: + return self.format(self.value.hour % 12, num) elif char == 'H': return self.format(self.value.hour, num) elif char == 'K': - return self.format(self.value.hour % 12 - 1, num) + return self.format(self.value.hour % 12, num) elif char == 'k': - return self.format(self.value.hour + 1, num) + if self.value.hour == 0: + return self.format(24, num) + else: + return self.format(self.value.hour, num) elif char == 'm': return self.format(self.value.minute, num) elif char == 's': @@ -784,7 +790,7 @@ return '%d' % ((self.value.day - 1) / 7 + 1) def format_period(self, char): - period = {0: 'am', 1: 'pm'}[int(self.value.hour > 12)] + period = {0: 'am', 1: 'pm'}[int(self.value.hour >= 12)] return get_period_names(locale=self.locale)[period] def format_frac_seconds(self, num): diff --git a/babel/tests/dates.py b/babel/tests/dates.py --- a/babel/tests/dates.py +++ b/babel/tests/dates.py @@ -182,6 +182,19 @@ fmt = dates.DateTimeFormat(t, locale='fr_FR') self.assertEqual(u'Heure de l’Europe centrale', fmt['vvvv']) + def test_hour_formatting(self): + l = 'en_US' + t = time(0, 0, 0) + self.assertEqual(dates.format_time(t, 'h a', locale=l), '12 AM') + self.assertEqual(dates.format_time(t, 'H', locale=l), '0') + self.assertEqual(dates.format_time(t, 'k', locale=l), '24') + self.assertEqual(dates.format_time(t, 'K a', locale=l), '0 AM') + t = time(12, 0, 0) + self.assertEqual(dates.format_time(t, 'h a', locale=l), '12 PM') + self.assertEqual(dates.format_time(t, 'H', locale=l), '12') + self.assertEqual(dates.format_time(t, 'k', locale=l), '12') + self.assertEqual(dates.format_time(t, 'K a', locale=l), '0 PM') + class FormatDateTestCase(unittest.TestCase):