changeset 242:9b13c9a436c5

More work on #46 (week-of-year/week-of-month).
author cmlenz
date Tue, 07 Aug 2007 20:01:35 +0000
parents be0a3606471f
children 2ed73d964211
files babel/dates.py babel/tests/dates.py
diffstat 2 files changed, 31 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- 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:
--- 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)
Copyright (C) 2012-2017 Edgewall Software