# HG changeset patch # User cmlenz # Date 1186516895 0 # Node ID e47245bf65b36da8c3e589dd68e5a96588350a67 # Parent 4afe02d810834f2506f3387768112e61bda83bc4 More work on #46 (week-of-year/week-of-month). diff --git a/babel/dates.py b/babel/dates.py --- a/babel/dates.py +++ b/babel/dates.py @@ -746,12 +746,19 @@ def format_week(self, char, num): if char.islower(): # week of year - return self.format(self.get_week_number(self.get_day_of_year()), - num) + week = self.get_week_number(self.get_day_of_year()) + if week == 0: + # FIXME: I suppose this should return the last week number of + # the previous year + pass + return self.format(week, num) else: # week of month - # FIXME: this should really be based on the first_week_day and - # min_week_days locale data - return '%d' % ((self.value.day + 6 - self.value.weekday()) / 7 + 1) + week = self.get_week_number(self.value.day) + if week == 0: + # FIXME: I suppose this should return the last week number of + # the previous month + pass + return '%d' % week def format_weekday(self, char, num): if num < 3: diff --git a/babel/tests/dates.py b/babel/tests/dates.py --- a/babel/tests/dates.py +++ b/babel/tests/dates.py @@ -22,17 +22,33 @@ class DateTimeFormatTestCase(unittest.TestCase): - def test_week_of_year(self): + def test_week_of_year_first(self): d = date(2006, 1, 8) fmt = dates.DateTimeFormat(d, locale='de_DE') self.assertEqual('1', fmt['w']) fmt = dates.DateTimeFormat(d, locale='en_US') self.assertEqual('02', fmt['ww']) - def test_week_of_month(self): - d = date(2007, 4, 1) + def test_week_of_year_last(self): + d = date(2005, 12, 26) + fmt = dates.DateTimeFormat(d, locale='de_DE') + self.assertEqual('52', fmt['w']) fmt = dates.DateTimeFormat(d, locale='en_US') + self.assertEqual('53', fmt['ww']) + + def test_week_of_month_first(self): + d = date(2006, 1, 8) + fmt = dates.DateTimeFormat(d, locale='de_DE') self.assertEqual('1', fmt['W']) + fmt = dates.DateTimeFormat(d, locale='en_US') + self.assertEqual('2', fmt['W']) + + def test_week_of_month_last(self): + d = date(2006, 1, 29) + fmt = dates.DateTimeFormat(d, locale='de_DE') + self.assertEqual('4', fmt['W']) + fmt = dates.DateTimeFormat(d, locale='en_US') + self.assertEqual('5', fmt['W']) def test_day_of_year(self): d = date(2007, 4, 1)