# HG changeset patch # User cmlenz # Date 1184365323 0 # Node ID 15ac328954f5e6f93c3b8bfb9228c4e9a7f812a3 # Parent 0d35d209a0457465bc912e659ed8fb76b297df46 Dummy/stub implementation for week-in-year and week-in-month date format fields. Also, treat extended year the same as the regular year field, not even ICU seems to handle it specially. diff --git a/babel/dates.py b/babel/dates.py --- a/babel/dates.py +++ b/babel/dates.py @@ -438,17 +438,18 @@ self.locale = Locale.parse(locale) def __getitem__(self, name): - # TODO: a number of fields missing here char = name[0] num = len(name) if char == 'G': return self.format_era(char, num) - elif char in ('y', 'Y'): + elif char in ('y', 'Y', 'u'): return self.format_year(char, num) elif char in ('Q', 'q'): return self.format_quarter(char, num) elif char in ('M', 'L'): return self.format_month(char, num) + elif char in ('w', 'W'): + return self.format_week(char, num) elif char == 'd': return self.format(self.value.day, num) elif char in ('E', 'e', 'c'): @@ -494,6 +495,14 @@ context = {3: 'format', 4: 'format', 5: 'stand-alone'}[num] return get_month_names(width, context, self.locale)[self.value.month] + def format_week(self, char, num): + # FIXME: this should really be based on the first_week_day and + # min_week_days locale data + if char.islower(): + return self.value.strftime('%W') + else: + return '%d' % ((self.value.day + 6 - self.value.weekday()) / 7 + 1) + def format_weekday(self, char, num): if num < 3: if char.islower(): @@ -542,7 +551,6 @@ pattern = {3: '%+03d%02d', 4: 'GMT %+03d:%02d'}[max(3, num)] return pattern % (hours, seconds // 60) - def format(self, value, length): return ('%%0%dd' % length) % value diff --git a/babel/tests/dates.py b/babel/tests/dates.py --- a/babel/tests/dates.py +++ b/babel/tests/dates.py @@ -22,6 +22,16 @@ class DateTimeFormatTestCase(unittest.TestCase): + def test_week_of_year(self): + d = datetime(2007, 4, 1) + fmt = dates.DateTimeFormat(d, locale='en_US') + self.assertEqual('13', fmt['w']) + + def test_week_of_month(self): + d = datetime(2007, 4, 1) + fmt = dates.DateTimeFormat(d, locale='en_US') + self.assertEqual('1', fmt['W']) + def test_local_day_of_week(self): d = datetime(2007, 4, 1) # a sunday fmt = dates.DateTimeFormat(d, locale='de_DE')