add new test, better fail-check, and non-transitioning tz fix

This commit is contained in:
Colin Davidson
2024-12-01 11:54:52 +11:00
committed by flysand7
parent 24ec0f0ebf
commit 3b4338b685
3 changed files with 32 additions and 0 deletions
+16
View File
@@ -203,6 +203,22 @@ generate_rrule_from_tzi :: proc(tzi: ^REG_TZI_FORMAT, abbrevs: TZ_Abbrev, alloca
if err != nil { return }
defer if err != nil { delete(std_name, allocator) }
if (tzi.std_date.month == 0) {
return datetime.TZ_RRule{
has_dst = false,
std_name = std_name,
std_offset = -(i64(tzi.bias) + i64(tzi.std_bias)) * 60,
dst_date = datetime.TZ_Transition_Date{
type = .Month_Week_Day,
month = u8(tzi.std_date.month),
week = u8(tzi.std_date.day),
day = tzi.std_date.day_of_week,
time = (i64(tzi.std_date.hour) * 60 * 60) + (i64(tzi.std_date.minute) * 60) + i64(tzi.std_date.second),
}
}, true
}
dst_name: string
dst_name, err = strings.clone(abbrevs.dst, allocator)
if err != nil { return }
+2
View File
@@ -93,6 +93,8 @@ trans_date_to_seconds :: proc(year: i64, td: datetime.TZ_Transition_Date) -> (se
switch td.type {
case .Month_Week_Day:
if td.month < 1 { return }
t += month_to_seconds(int(td.month) - 1, is_leap)
weekday := ((t + (4 * DAY_SEC)) %% (7 * DAY_SEC)) / DAY_SEC