From 148d560dd20c0173e4490b30d92504f64869eb30 Mon Sep 17 00:00:00 2001 From: Johanna Larsson Date: Fri, 28 Aug 2026 05:41:23 +0100 Subject: [PATCH] Add timezone handling for atom date times --- config/config.exs | 2 ++ lib/annot_at/feeds/atom.ex | 4 ++-- lib/annot_at/feeds/rss.ex | 2 +- mix.exs | 3 ++- mix.lock | 1 + 5 files changed, 8 insertions(+), 4 deletions(-) diff --git a/config/config.exs b/config/config.exs index 2a1686f..a99cb44 100644 --- a/config/config.exs +++ b/config/config.exs @@ -94,6 +94,8 @@ config :sentry, enable_source_code_context: true, root_source_code_paths: [File.cwd!()] +config :elixir, :time_zone_database, Tz.TimeZoneDatabase + # Import environment specific config. This must remain at the bottom # of this file so it overrides the configuration defined above. import_config "#{config_env()}.exs" diff --git a/lib/annot_at/feeds/atom.ex b/lib/annot_at/feeds/atom.ex index dc1bf81..dbac9d3 100644 --- a/lib/annot_at/feeds/atom.ex +++ b/lib/annot_at/feeds/atom.ex @@ -178,8 +178,8 @@ defmodule AnnotAt.Feeds.Atom do defp parse_date(nil), do: nil defp parse_date(text) do - case DateTimeParser.parse_datetime(text) do - {:ok, datetime} -> + case DateTime.from_iso8601(text) do + {:ok, datetime, _offset} -> datetime {:error, reason} -> diff --git a/lib/annot_at/feeds/rss.ex b/lib/annot_at/feeds/rss.ex index 7c1cdf1..9ffc88b 100644 --- a/lib/annot_at/feeds/rss.ex +++ b/lib/annot_at/feeds/rss.ex @@ -144,7 +144,7 @@ defmodule AnnotAt.Feeds.RSS do defp parse_date(nil), do: nil defp parse_date(text) do - case DateTimeParser.parse_datetime(text) do + case DateTimeParser.parse_datetime(text, to_utc: true, assume_utc: true) do {:ok, datetime} -> datetime diff --git a/mix.exs b/mix.exs index 66bcd1b..425b3c6 100644 --- a/mix.exs +++ b/mix.exs @@ -76,7 +76,8 @@ defmodule AnnotAt.MixProject do {:html_sanitize_ex, "~> 1.4"}, {:latch, "~> 0.5"}, {:sentry, "~> 13.4"}, - {:logger_json, "~> 7.0"} + {:logger_json, "~> 7.0"}, + {:tz, "~> 0.28"} ] end diff --git a/mix.lock b/mix.lock index 591b0eb..302dbc5 100644 --- a/mix.lock +++ b/mix.lock @@ -56,6 +56,7 @@ "telemetry_metrics": {:hex, :telemetry_metrics, "1.1.0", "5bd5f3b5637e0abea0426b947e3ce5dd304f8b3bc6617039e2b5a008adc02f8f", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "e7b79e8ddfde70adb6db8a6623d1778ec66401f366e9a8f5dd0955c56bc8ce67"}, "telemetry_poller": {:hex, :telemetry_poller, "1.3.0", "d5c46420126b5ac2d72bc6580fb4f537d35e851cc0f8dbd571acf6d6e10f5ec7", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "51f18bed7128544a50f75897db9974436ea9bfba560420b646af27a9a9b35211"}, "thousand_island": {:hex, :thousand_island, "1.5.0", "f50a213cac97262b6d5ebb85745aa2c00fec1413191e6e66834788d45425cecb", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "708923d40523e43cf99041ab37a0d4b0ec426ac6438fa3716ab23d919eaeb412"}, + "tz": {:hex, :tz, "0.28.2", "6c47f3d1a8ee5c33a1d8f0ba49e5a851b0a30c408a587d907aff6e71228b3b32", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:mint, "~> 1.6", [hex: :mint, repo: "hexpm", optional: true]}], "hexpm", "a6bf7355a33f0a7511602ab4566432ac0901d8abff81e94e455bca19708a0c87"}, "websock": {:hex, :websock, "0.5.3", "2f69a6ebe810328555b6fe5c831a851f485e303a7c8ce6c5f675abeb20ebdadc", [:mix], [], "hexpm", "6105453d7fac22c712ad66fab1d45abdf049868f253cf719b625151460b8b453"}, "websock_adapter": {:hex, :websock_adapter, "0.6.0", "73db5ab8aaefd1a876a97ce3e6afc96562625de69ef17a4e04426e034849d0b8", [:mix], [{:bandit, ">= 0.6.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "50021a85bce8f203b086705d9e0c5415e2c7eb05d319111b0428fe71f9934617"}, } -- 2.51.2