changeset 217:15ac328954f5

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.
author cmlenz
date Fri, 13 Jul 2007 22:22:03 +0000
parents 0d35d209a045
children 0a30f3974997
files babel/dates.py babel/tests/dates.py
diffstat 2 files changed, 21 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- 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
 
--- 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')
Copyright (C) 2012-2017 Edgewall Software