From 2bdc3aec4222218a4058aaa7d93e04e5e635cbbd Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Thu, 20 Jan 2022 12:34:26 -0500 Subject: [PATCH] LibC: Use LibTimeZone to offset localtime() for the system time zone --- Userland/Libraries/LibC/time.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Userland/Libraries/LibC/time.cpp b/Userland/Libraries/LibC/time.cpp index 3cf77b7889..83f8f89156 100644 --- a/Userland/Libraries/LibC/time.cpp +++ b/Userland/Libraries/LibC/time.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -155,7 +156,14 @@ struct tm* localtime_r(const time_t* t, struct tm* tm) { if (!t) return nullptr; - time_to_tm(tm, (*t) - timezone); + + auto time_zone = TimeZone::current_time_zone(); + auto time = AK::Time::from_seconds(*t); + + if (auto offset = TimeZone::get_time_zone_offset(time_zone, time); offset.has_value()) + time += AK::Time::from_seconds(offset->seconds); + + time_to_tm(tm, time.to_seconds()); return tm; } @@ -196,7 +204,7 @@ char* asctime_r(const struct tm* tm, char* buffer) return buffer; } -//FIXME: Some formats are not supported. +// FIXME: Some formats are not supported. size_t strftime(char* destination, size_t max_size, const char* format, const struct tm* tm) { const char wday_short_names[7][4] = {