fix: fixed an offset issue with date formatting.

This commit is contained in:
Spencer Brower
2026-09-02 16:52:55 -04:00
parent d02b22e94e
commit 22dfa4c448
2 changed files with 31 additions and 8 deletions
+13 -3
View File
@@ -124,15 +124,25 @@ format_rfc822 :: proc(iso: string, allocator := context.temp_allocator) -> strin
buf: [8]byte
t := time.to_string_hms(date, buf[:])
// RFC-822 zone: sign followed by two-digit hours and minutes (e.g. +0000,
// +0530, -0800). offset is in minutes.
sign := '+'
off := offset
if off < 0 {
sign = '-'
off = -off
}
return fmt.aprintf(
"%s, %02d %s %d %s %3d%2d",
"%s, %02d %s %d %s %c%02d%02d",
weekday[:3],
time.day(date),
month[:3],
time.year(date),
t,
offset / 60,
offset % 60,
sign,
off / 60,
off % 60,
allocator = allocator,
)
}
+18 -5
View File
@@ -50,11 +50,24 @@ test_format_rfc822_short_passthrough :: proc(t: ^testing.T) {
@(test)
test_format_rfc822_full_date :: proc(t: ^testing.T) {
got := format_rfc822("2024-01-15T10:30:00Z")
// Result is temp-allocated (reset by the test runner), so no delete.
// 2024-01-15 is a Monday. Assert the stable leading portion; the trailing
// offset rendering is intentionally left unpinned here.
testing.expect(t, strings.has_prefix(got, "Mon, 15 Jan 2024 10:30:00"), got)
// Results are temp-allocated (reset by the test runner), so no delete.
// 2024-01-15 is a Monday; wall-clock time is preserved and the zone is
// rendered as an RFC-822 ±HHMM offset.
testing.expect_value(
t,
format_rfc822("2024-01-15T10:30:00Z"),
"Mon, 15 Jan 2024 10:30:00 +0000",
)
testing.expect_value(
t,
format_rfc822("2024-01-15T10:30:00+05:30"),
"Mon, 15 Jan 2024 10:30:00 +0530",
)
testing.expect_value(
t,
format_rfc822("2024-01-15T10:30:00-08:00"),
"Mon, 15 Jan 2024 10:30:00 -0800",
)
}
// ---------------------------------------------------------------------------