# HG changeset patch # User cmlenz # Date 1182187919 0 # Node ID 90bf48c747147eca11b06d147da9c8ec12f68d9e # Parent 7b807415c3fff8b11eaaf50680d206a77b885f79 Implement wall-time time-zone display. diff --git a/babel/dates.py b/babel/dates.py --- a/babel/dates.py +++ b/babel/dates.py @@ -510,12 +510,12 @@ return get_period_names(locale=self.locale)[period] def format_timezone(self, char, num): - if char == 'z': + if char in ('z', 'v'): if hasattr(self.value.tzinfo, 'zone'): zone = self.value.tzinfo.zone else: zone = self.value.tzinfo.tzname(self.value) - + # Get the canonical time-zone code zone = self.locale.zone_aliases.get(zone, zone) @@ -524,7 +524,10 @@ if display: if 'long' in display: width = {3: 'short', 4: 'long'}[max(3, num)] - dst = self.value.dst() and 'daylight' or 'standard' + if char == 'v': + dst = 'generic' + else: + dst = self.value.dst() and 'daylight' or 'standard' return display[width][dst] elif 'city' in display: return display['city'] @@ -539,8 +542,6 @@ pattern = {3: '%+03d%02d', 4: 'GMT %+03d:%02d'}[max(3, num)] return pattern % (hours, seconds // 60) - elif char == 'v': - raise NotImplementedError 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 @@ -68,6 +68,17 @@ fmt = dates.DateTimeFormat(t, locale='de_DE') self.assertEqual('GMT +01:00', fmt['ZZZZ']) + def test_timezone_walltime_short(self): + tz = timezone('Europe/Paris') + t = time(15, 30, tzinfo=tz) + fmt = dates.DateTimeFormat(t, locale='en_US') + self.assertEqual('CET', fmt['v']) + + def test_timezone_walltime_long(self): + tz = timezone('Europe/Paris') + t = time(15, 30, tzinfo=tz) + fmt = dates.DateTimeFormat(t, locale='en_US') + self.assertEqual('Central European Time', fmt['vvvv']) class FormatDateTestCase(unittest.TestCase):