summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBT-sschmid <39914536+BT-sschmid@users.noreply.github.com>2019-03-01 12:00:44 +0100
committerAarni Koskela <akx@iki.fi>2019-03-01 13:00:44 +0200
commitea5bc4988bf7c3be84d296eb874aa11ed86c907d (patch)
treebe4fea1c2b23e9ead65bce3689ae8028f7bd0d6b
parent60af039d9b282b46e37f6f8556005c339f5c24a2 (diff)
downloadbabel-ea5bc4988bf7c3be84d296eb874aa11ed86c907d.tar.gz
fixes #619 wrong weeknumber for 31.12.2018 (#621)
The weeknumber was calculated to 53, but by definition the value must compute to 1. the fix will compute the weeknumber by using date.isocalendar if locale.first_week_day == 0. Also the computation of the year format 'YYYY' is replaced by isocalendar.
-rw-r--r--babel/dates.py16
-rw-r--r--tests/test_dates.py9
2 files changed, 22 insertions, 3 deletions
diff --git a/babel/dates.py b/babel/dates.py
index 4bae3ea..ec86991 100644
--- a/babel/dates.py
+++ b/babel/dates.py
@@ -1319,9 +1319,7 @@ class DateTimeFormat(object):
def format_year(self, char, num):
value = self.value.year
if char.isupper():
- week = self.get_week_number(self.get_day_of_year())
- if week == 0:
- value -= 1
+ value = self.value.isocalendar()[0]
year = self.format(value, num)
if num == 2:
year = year[-2:]
@@ -1505,8 +1503,20 @@ class DateTimeFormat(object):
if first_day < 0:
first_day += 7
week_number = (day_of_period + first_day - 1) // 7
+
if 7 - first_day >= self.locale.min_week_days:
week_number += 1
+
+ if self.locale.first_week_day == 0:
+ # Correct the weeknumber in case of iso-calendar usage (first_week_day=0).
+ # If the weeknumber exceeds the maximum number of weeks for the given year
+ # we must count from zero.For example the above calculation gives week 53
+ # for 2018-12-31. By iso-calender definition 2018 has a max of 52
+ # weeks, thus the weeknumber must be 53-52=1.
+ max_weeks = date(year=self.value.year, day=28, month=12).isocalendar()[1]
+ if week_number > max_weeks:
+ week_number -= max_weeks
+
return week_number
diff --git a/tests/test_dates.py b/tests/test_dates.py
index b8c293b..d77c0ea 100644
--- a/tests/test_dates.py
+++ b/tests/test_dates.py
@@ -79,6 +79,15 @@ class DateTimeFormatTestCase(unittest.TestCase):
fmt = dates.DateTimeFormat(d, locale='en_US')
self.assertEqual('53', fmt['w'])
+ def test_week_of_year_de_first_us_last_with_year(self):
+ d = date(2018,12,31)
+ fmt = dates.DateTimeFormat(d, locale='de_DE')
+ self.assertEqual('1', fmt['w'])
+ self.assertEqual('2019', fmt['YYYY'])
+ fmt = dates.DateTimeFormat(d, locale='en_US')
+ self.assertEqual('53', fmt['w'])
+ self.assertEqual('2018',fmt['yyyy'])
+
def test_week_of_month_first(self):
d = date(2006, 1, 8)
fmt = dates.DateTimeFormat(d, locale='de_DE')