TimeZone.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. /*
  2. * Copyright (c) 2021-2023, Linus Groh <linusg@serenityos.org>
  3. * Copyright (c) 2024, Tim Flynn <trflynn89@ladybird.org>
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #pragma once
  8. #include <AK/String.h>
  9. #include <AK/Vector.h>
  10. #include <LibCrypto/BigInt/SignedBigInteger.h>
  11. #include <LibJS/Runtime/Completion.h>
  12. #include <LibJS/Runtime/Temporal/AbstractOperations.h>
  13. #include <LibJS/Runtime/Value.h>
  14. namespace JS::Temporal {
  15. struct TimeZone {
  16. Optional<String> name;
  17. Optional<i64> offset_minutes;
  18. };
  19. enum class Disambiguation {
  20. Compatible,
  21. Earlier,
  22. Later,
  23. Reject,
  24. };
  25. String format_offset_time_zone_identifier(i64 offset_minutes, Optional<TimeStyle> = {});
  26. ThrowCompletionOr<String> to_temporal_time_zone_identifier(VM&, Value temporal_time_zone_like);
  27. ThrowCompletionOr<Crypto::SignedBigInteger> get_epoch_nanoseconds_for(VM&, StringView time_zone, ISODateTime const&, Disambiguation);
  28. ThrowCompletionOr<Crypto::SignedBigInteger> disambiguate_possible_epoch_nanoseconds(VM&, Vector<Crypto::SignedBigInteger> possible_epoch_ns, StringView time_zone, ISODateTime const&, Disambiguation);
  29. ThrowCompletionOr<Vector<Crypto::SignedBigInteger>> get_possible_epoch_nanoseconds(VM&, StringView time_zone, ISODateTime const&);
  30. ThrowCompletionOr<TimeZone> parse_time_zone_identifier(VM&, StringView identifier);
  31. TimeZone parse_time_zone_identifier(StringView identifier);
  32. TimeZone parse_time_zone_identifier(ParseResult const&);
  33. }