From: Jun Omae Date: Sun, 1 May 2022 07:33:41 +0000 (+0900) Subject: Fix get_period_id() with `dayPeriodRule` across 0:00 X-Git-Tag: v2.10.2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=128322c6b9ad23f4c1cd0b3996dd00fc48306750;p=thirdparty%2Fbabel.git Fix get_period_id() with `dayPeriodRule` across 0:00 --- diff --git a/babel/dates.py b/babel/dates.py index 13863165..74fc6db7 100644 --- a/babel/dates.py +++ b/babel/dates.py @@ -1113,6 +1113,12 @@ def get_period_id(time, tzinfo=None, type=None, locale=LC_TIME): >>> get_period_names(locale="de")[get_period_id(time(7, 42), locale="de")] u'Morgen' + >>> get_period_id(time(0), locale="en_US") + u'midnight' + + >>> get_period_id(time(0), type="selection", locale="en_US") + u'night1' + :param time: The time to inspect. :param tzinfo: The timezone for the time. See ``format_time``. :param type: The period type to use. Either "selection" or None. @@ -1136,6 +1142,16 @@ def get_period_id(time, tzinfo=None, type=None, locale=LC_TIME): for rule_id, rules in rulesets: for rule in rules: + if "from" in rule and "before" in rule: + if rule["from"] < rule["before"]: + if rule["from"] <= seconds_past_midnight < rule["before"]: + return rule_id + else: + # e.g. from="21:00" before="06:00" + if rule["from"] <= seconds_past_midnight < 86400 or \ + 0 <= seconds_past_midnight < rule["before"]: + return rule_id + start_ok = end_ok = False if "from" in rule and seconds_past_midnight >= rule["from"]: diff --git a/tests/test_day_periods.py b/tests/test_day_periods.py index eb12b07f..52cbc5e4 100644 --- a/tests/test_day_periods.py +++ b/tests/test_day_periods.py @@ -10,6 +10,9 @@ import pytest ("de", time(3, 11), "night1"), # (after, before) ("fi", time(0), "midnight"), # (at) ("en_US", time(12), "noon"), # (at) + ("en_US", time(21), "night1"), # (from, before) across 0:00 + ("en_US", time(5), "night1"), # (from, before) across 0:00 + ("en_US", time(6), "morning1"), # (from, before) ("agq", time(10), "am"), # no periods defined ("agq", time(22), "pm"), # no periods defined ("am", time(14), "afternoon1"), # (before, after)