mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 08:07:44 +00:00
LibTimeZone: Add methods to canonicalize a time zone name
This commit is contained in:
parent
1c2c98ac5d
commit
e9c42d0bc5
3 changed files with 29 additions and 0 deletions
|
@ -69,4 +69,19 @@ TEST_CASE(time_zone_to_string_link)
|
||||||
EXPECT_EQ(TimeZone::time_zone_to_string(TimeZone::TimeZone::Etc_Universal), "Etc/UTC"sv);
|
EXPECT_EQ(TimeZone::time_zone_to_string(TimeZone::TimeZone::Etc_Universal), "Etc/UTC"sv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_CASE(canonicalize_time_zone)
|
||||||
|
{
|
||||||
|
EXPECT_EQ(TimeZone::canonicalize_time_zone("America/New_York"sv), "America/New_York"sv);
|
||||||
|
EXPECT_EQ(TimeZone::canonicalize_time_zone("AmErIcA/NeW_YoRk"sv), "America/New_York"sv);
|
||||||
|
|
||||||
|
EXPECT_EQ(TimeZone::canonicalize_time_zone("UTC"sv), "UTC"sv);
|
||||||
|
EXPECT_EQ(TimeZone::canonicalize_time_zone("GMT"sv), "UTC"sv);
|
||||||
|
EXPECT_EQ(TimeZone::canonicalize_time_zone("GMT+0"sv), "UTC"sv);
|
||||||
|
EXPECT_EQ(TimeZone::canonicalize_time_zone("GMT-0"sv), "UTC"sv);
|
||||||
|
EXPECT_EQ(TimeZone::canonicalize_time_zone("Etc/UTC"sv), "UTC"sv);
|
||||||
|
EXPECT_EQ(TimeZone::canonicalize_time_zone("Etc/GMT"sv), "UTC"sv);
|
||||||
|
|
||||||
|
EXPECT(!TimeZone::canonicalize_time_zone("I don't exist"sv).has_value());
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -11,4 +11,17 @@ namespace TimeZone {
|
||||||
Optional<TimeZone> __attribute__((weak)) time_zone_from_string(StringView) { return {}; }
|
Optional<TimeZone> __attribute__((weak)) time_zone_from_string(StringView) { return {}; }
|
||||||
StringView __attribute__((weak)) time_zone_to_string(TimeZone) { return {}; }
|
StringView __attribute__((weak)) time_zone_to_string(TimeZone) { return {}; }
|
||||||
|
|
||||||
|
Optional<StringView> canonicalize_time_zone(StringView time_zone)
|
||||||
|
{
|
||||||
|
auto maybe_time_zone = time_zone_from_string(time_zone);
|
||||||
|
if (!maybe_time_zone.has_value())
|
||||||
|
return {};
|
||||||
|
|
||||||
|
auto canonical_time_zone = time_zone_to_string(*maybe_time_zone);
|
||||||
|
if (canonical_time_zone.is_one_of("Etc/UTC"sv, "Etc/GMT"sv))
|
||||||
|
return "UTC"sv;
|
||||||
|
|
||||||
|
return canonical_time_zone;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,5 +14,6 @@ namespace TimeZone {
|
||||||
|
|
||||||
Optional<TimeZone> time_zone_from_string(StringView time_zone);
|
Optional<TimeZone> time_zone_from_string(StringView time_zone);
|
||||||
StringView time_zone_to_string(TimeZone time_zone);
|
StringView time_zone_to_string(TimeZone time_zone);
|
||||||
|
Optional<StringView> canonicalize_time_zone(StringView time_zone);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue