DateTime.cpp 1001 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. /*
  2. * Copyright (c) 2023, Tim Flynn <trflynn89@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <AK/GenericLexer.h>
  7. #include <LibTimeZone/DateTime.h>
  8. #include <LibTimeZone/TimeZone.h>
  9. namespace Core {
  10. Optional<StringView> parse_time_zone_name(GenericLexer& lexer)
  11. {
  12. auto start_position = lexer.tell();
  13. Optional<StringView> canonicalized_time_zone;
  14. lexer.ignore_until([&](auto) {
  15. auto time_zone = lexer.input().substring_view(start_position, lexer.tell() - start_position + 1);
  16. canonicalized_time_zone = TimeZone::canonicalize_time_zone(time_zone);
  17. return canonicalized_time_zone.has_value();
  18. });
  19. if (canonicalized_time_zone.has_value())
  20. lexer.ignore();
  21. return canonicalized_time_zone;
  22. }
  23. void apply_time_zone_offset(StringView time_zone, UnixDateTime& time)
  24. {
  25. if (auto offset = TimeZone::get_time_zone_offset(time_zone, time); offset.has_value())
  26. time -= Duration::from_seconds(offset->seconds);
  27. }
  28. }