Skip to content

Commit 2c71c01

Browse files
committed
Don't model Morocco as standard/daylight
1 parent 99c2515 commit 2c71c01

File tree

10 files changed

+60
-41
lines changed

10 files changed

+60
-41
lines changed

provider/data/datetime/data/timezone_metazone_periods_v1.rs.data

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

provider/data/datetime/fingerprints.csv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27293,7 +27293,7 @@ datetime/patterns/time/v1, zh/h, -> yue-Hans/h
2729327293
datetime/patterns/time/v1, zh/h0, -> yue-Hans/h0
2729427294
datetime/patterns/time/v1, zh/j, -> yue-Hans/h0
2729527295
datetime/patterns/time/v1, zu/h, -> az/h
27296-
timezone/metazone/periods/v1, <singleton>, 7421B, 7333B, 2c1b1e90600de553
27296+
timezone/metazone/periods/v1, <singleton>, 7431B, 7343B, 83352f522f03c634
2729727297
timezone/names/cities/override/v1, <lookup>, 840B, 161 identifiers
2729827298
timezone/names/cities/override/v1, <total>, 248266B, 241799B, 146 unique payloads
2729927299
timezone/names/cities/override/v1, af, 882B, 838B, 1f378152ac0f4a7f

provider/data/datetime/stubdata/timezone_metazone_periods_v1.rs.data

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

provider/data/time/data/timezone_variants_offsets_v1.rs.data

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

provider/data/time/fingerprints.csv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
timezone/identifiers/iana/core/v1, <singleton>, 9559B, 9516B, fe8602f4657f987
22
timezone/identifiers/iana/extended/v1, <singleton>, 9757B, 9735B, ca82fcaee49bef7
33
timezone/identifiers/windows/v1, <singleton>, 8634B, 8591B, 90b7fe3f9cadf5bd
4-
timezone/variants/offsets/v1, <singleton>, 13392B, 13304B, 419c76fb64e62d36
4+
timezone/variants/offsets/v1, <singleton>, 13380B, 13292B, 8967461d3265e90

provider/data/time/stubdata/timezone_variants_offsets_v1.rs.data

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

provider/source/data/debug/timezone/metazone/periods/v1.json

Lines changed: 4 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

provider/source/data/debug/timezone/variants/offsets/v1.json

Lines changed: 2 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

provider/source/src/source.rs

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -479,30 +479,30 @@ impl TzdbCache {
479479
}
480480
}
481481

482-
// Morocco doesn't have have rearguard data in the text file, so we have to replicate the transform from
483-
// ziguard.awk: https://github.com/eggert/tz/blob/271a5784a59e454b659d85948b5e65c17c11516a/ziguard.awk#L261-L299
484-
for line in lines.iter_mut() {
485-
if line.starts_with("Rule\tMorocco") {
486-
let mut parts = line.split('\t').skip(2);
487-
let from = parts.next().unwrap();
488-
let to = parts.next().unwrap();
489-
let _type = parts.next().unwrap();
490-
let month = parts.next().unwrap();
491-
let _day = parts.next().unwrap();
492-
let _time = parts.next().unwrap();
493-
let save = parts.next().unwrap();
494-
if to == "2018" && month == "Oct" {
495-
*line = line.replace("2018", "2017");
496-
} else if from.parse::<i32>().unwrap() >= 2019 {
497-
if save.trim() == "0" {
498-
*line = line.replace("\t0\t", "\t1:00\t");
499-
} else {
500-
*line = line.replace("\t-1:00\t", "\t0\t");
501-
}
502-
}
503-
}
504-
*line = line.replace("1:00\tMorocco\t%z", "0:00\tMorocco\t+00/+01");
505-
}
482+
// // Morocco doesn't have have rearguard data in the text file, so we have to replicate the transform from
483+
// // ziguard.awk: https://github.com/eggert/tz/blob/271a5784a59e454b659d85948b5e65c17c11516a/ziguard.awk#L261-L299
484+
// for line in lines.iter_mut() {
485+
// if line.starts_with("Rule\tMorocco") {
486+
// let mut parts = line.split('\t').skip(2);
487+
// let from = parts.next().unwrap();
488+
// let to = parts.next().unwrap();
489+
// let _type = parts.next().unwrap();
490+
// let month = parts.next().unwrap();
491+
// let _day = parts.next().unwrap();
492+
// let _time = parts.next().unwrap();
493+
// let save = parts.next().unwrap();
494+
// if to == "2018" && month == "Oct" {
495+
// *line = line.replace("2018", "2017");
496+
// } else if from.parse::<i32>().unwrap() >= 2019 {
497+
// if save.trim() == "0" {
498+
// *line = line.replace("\t0\t", "\t1:00\t");
499+
// } else {
500+
// *line = line.replace("\t-1:00\t", "\t0\t");
501+
// }
502+
// }
503+
// }
504+
// *line = line.replace("1:00\tMorocco\t%z", "0:00\tMorocco\t+00/+01");
505+
// }
506506

507507
#[allow(deprecated)] // no alternative?!
508508
let parser = LineParser::new();

provider/source/src/time_zones/convert.rs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,17 @@ impl SourceDataProvider {
300300
.flatten()
301301
.collect::<Vec<_>>();
302302

303+
if iana == "Africa/Casablanca" || iana == "Africa/El_Aaiun" {
304+
periods.push((
305+
bcp47,
306+
DateTime {
307+
date: Date::try_new_iso(2018, 12, 28).unwrap(),
308+
time: Time::try_new(2, 0, 0, 0).unwrap(),
309+
},
310+
NichedOption(meta_zone_id_data.get("Europe_Central").copied()),
311+
));
312+
}
313+
303314
let mut i = 0;
304315
while i < periods.len() {
305316
if i + 1 < periods.len() && periods[i].1 == periods[i + 1].1 {
@@ -346,12 +357,20 @@ impl SourceDataProvider {
346357
data: &mut Vec<(ZoneNameTimestamp, VariantOffsets)>,
347358
end_time: ZoneNameTimestamp,
348359
mut utc_offset: i64,
349-
dst_offset_relative: i64,
360+
mut dst_offset_relative: i64,
350361
) {
351362
// Africa/Monrovia used -00:44:30 pre-1972. We cannot represent this, so we set it to -00:45
352363
if utc_offset == -2670 {
353364
utc_offset = -2700
354365
}
366+
// Morocco's Ramadan time is modeled as a negative DST offset. We don't support time zone variants
367+
// other than standard and daylight (because CLDR doesn't have patterns for "{0} Ramadan Time"),
368+
// so we ignore the possibility of this offset.
369+
// Clients using `infer_variant()` will see a fallback to a localized UTC offset, which is way
370+
// less ambiguous than either Morocco Standard Time or Morocco Daylight time.
371+
if dst_offset_relative == -3600 {
372+
dst_offset_relative = 0;
373+
}
355374

356375
data.push((
357376
end_time,

0 commit comments

Comments
 (0)