Skip to content

Commit 128322c

Browse files
jun66j5akx
authored andcommitted
Fix get_period_id() with dayPeriodRule across 0:00
1 parent b203c67 commit 128322c

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

babel/dates.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1113,6 +1113,12 @@ def get_period_id(time, tzinfo=None, type=None, locale=LC_TIME):
11131113
>>> get_period_names(locale="de")[get_period_id(time(7, 42), locale="de")]
11141114
u'Morgen'
11151115
1116+
>>> get_period_id(time(0), locale="en_US")
1117+
u'midnight'
1118+
1119+
>>> get_period_id(time(0), type="selection", locale="en_US")
1120+
u'night1'
1121+
11161122
:param time: The time to inspect.
11171123
:param tzinfo: The timezone for the time. See ``format_time``.
11181124
: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):
11361142

11371143
for rule_id, rules in rulesets:
11381144
for rule in rules:
1145+
if "from" in rule and "before" in rule:
1146+
if rule["from"] < rule["before"]:
1147+
if rule["from"] <= seconds_past_midnight < rule["before"]:
1148+
return rule_id
1149+
else:
1150+
# e.g. from="21:00" before="06:00"
1151+
if rule["from"] <= seconds_past_midnight < 86400 or \
1152+
0 <= seconds_past_midnight < rule["before"]:
1153+
return rule_id
1154+
11391155
start_ok = end_ok = False
11401156

11411157
if "from" in rule and seconds_past_midnight >= rule["from"]:

tests/test_day_periods.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@
1010
("de", time(3, 11), "night1"), # (after, before)
1111
("fi", time(0), "midnight"), # (at)
1212
("en_US", time(12), "noon"), # (at)
13+
("en_US", time(21), "night1"), # (from, before) across 0:00
14+
("en_US", time(5), "night1"), # (from, before) across 0:00
15+
("en_US", time(6), "morning1"), # (from, before)
1316
("agq", time(10), "am"), # no periods defined
1417
("agq", time(22), "pm"), # no periods defined
1518
("am", time(14), "afternoon1"), # (before, after)

0 commit comments

Comments
 (0)