/* * Copyright (c) 2024-2025, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include namespace Unicode { struct TimeZoneOffset { enum class InDST { No, Yes, }; AK::Duration offset; InDST in_dst { InDST::No }; }; struct TimeZoneTransition { struct Options { enum class Direction { Previous, Next, }; enum class IncludeGivenTime { No, Yes, }; enum class TransitionRule { AnyTransition, TransitionWhereUTCOffsetChanges, }; Direction direction { Direction::Previous }; IncludeGivenTime include_given_time { IncludeGivenTime::No }; TransitionRule transition_rule { TransitionRule::AnyTransition }; }; AK::Duration transition; }; String current_time_zone(); ErrorOr set_current_time_zone(StringView); void clear_system_time_zone_cache(); Vector const& available_time_zones(); Vector available_time_zones_in_region(StringView region); Optional resolve_primary_time_zone(StringView time_zone); Optional time_zone_offset(StringView time_zone, UnixDateTime time); Vector disambiguated_time_zone_offsets(StringView time_zone, UnixDateTime time); Optional get_time_zone_transition(StringView time_zone, UnixDateTime time, TimeZoneTransition::Options options); }