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'):
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():
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
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')