# HG changeset patch # User jonas # Date 1188135538 0 # Node ID cd2d75cf4b430cca39ef8322c00536880791c723 # Parent 5fe8910a2abea39bc2076e436a028e1e1f2286a1 Fixed formatting bug with 12-hour clock patterns. 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 + 1, 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), '13') + self.assertEqual(dates.format_time(t, 'K a', locale=l), '0 PM') + class FormatDateTestCase(unittest.TestCase):