Time zones can be confusing. I have an example in my TimeZoneInfo package to play around with time zones. In this example, you can set the current time (UTC). The sample also contains a clock with a time zone you can set. With this example, you can do something like this.
iex> FakeUtcDateTime.put(~U[2020-03-15 00:00:00Z])
:ok
iex> Clock.put_time_zone("Europe/London")
:okiex> FakeUtcDateTime.put(~U[2020-03-15 00:00:00Z])
:ok
iex> Clock.put_time_zone("Europe/London")
:ok
iex> lon = [{Clock.now(), Clock.now() |> Date }]
Date DateTime
iex> lon = [{Clock.now(), Clock.now() |> DateTime.shift_zone!("Etc/UTC")}]
[
{#DateTime<2020-03-15 00:01:30+00:00 GMT Europe/London>,
~U[2020-03-15 00:01:30Z]}
]
iex> Clock.put_time_zone("America/Winnipeg")
:ok
iex> win = [{Clock.now(), Clock.now() |> DateTime.shift_zone!("Etc/UTC")}]
[
{#DateTime<2020-03-14 19:02:03-05:00 CDT America/Winnipeg>,
~U[2020-03-15 00:02:03Z]}
]
iex> FakeUtcDateTime.put(~U[2020-03-15 12:00:00Z])
:ok
iex> Clock.put_time_zone("Europe/London")
:ok
iex> lon = [{Clock.now(), Clock.now() |> DateTime.shift_zone!("Etc/UTC")}|lon]
[
{#DateTime<2020-03-15 12:00:29+00:00 GMT Europe/London>,
~U[2020-03-15 12:00:29Z]},
{#DateTime<2020-03-15 00:01:30+00:00 GMT Europe/London>,
~U[2020-03-15 00:01:30Z]}
]
iex> Clock.put_time_zone("America/Winnipeg")
:ok
iex> win = [{Clock.now(), Clock.now() |> DateTime.shift_zone!("Etc/UTC")}|win]
[
{#DateTime<2020-03-15 07:00:40-05:00 CDT America/Winnipeg>,
~U[2020-03-15 12:00:40Z]},
{#DateTime<2020-03-14 19:02:03-05:00 CDT America/Winnipeg>,
~U[2020-03-15 00:02:03Z]}
]
iex> FakeUtcDateTime.put(~U[2020-03-15 23:00:00Z])
:ok
iex> Clock.put_time_zone("Europe/London")
:ok
iex> lon = [{Clock.now(), Clock.now() |> DateTime.shift_zone!("Etc/UTC")}|lon]
[
{#DateTime<2020-03-15 23:00:13+00:00 GMT Europe/London>,
~U[2020-03-15 23:00:13Z]},
{#DateTime<2020-03-15 12:00:29+00:00 GMT Europe/London>,
~U[2020-03-15 12:00:29Z]},
{#DateTime<2020-03-15 00:01:30+00:00 GMT Europe/London>,
~U[2020-03-15 00:01:30Z]}
]
iex> Clock.put_time_zone("America/Winnipeg")
:ok
iex> win = [{Clock.now(), Clock.now() |> DateTime.shift_zone!("Etc/UTC")}|win]
[
{#DateTime<2020-03-15 18:00:32-05:00 CDT America/Winnipeg>,
~U[2020-03-15 23:00:32Z]},
{#DateTime<2020-03-15 07:00:40-05:00 CDT America/Winnipeg>,
~U[2020-03-15 12:00:40Z]},
{#DateTime<2020-03-14 19:02:03-05:00 CDT America/Winnipeg>,
~U[2020-03-15 00:02:03Z]}
]
iex> Enum.zip(lon, win)
[
{{#DateTime<2020-03-15 23:00:13+00:00 GMT Europe/London>,
~U[2020-03-15 23:00:13Z]},
{#DateTime<2020-03-15 18:00:32-05:00 CDT America/Winnipeg>,
~U[2020-03-15 23:00:32Z]}},
{{#DateTime<2020-03-15 12:00:29+00:00 GMT Europe/London>,
~U[2020-03-15 12:00:29Z]},
{#DateTime<2020-03-15 07:00:40-05:00 CDT America/Winnipeg>,
~U[2020-03-15 12:00:40Z]}},
{{#DateTime<2020-03-15 00:01:30+00:00 GMT Europe/London>,
~U[2020-03-15 00:01:30Z]},
{#DateTime<2020-03-14 19:02:03-05:00 CDT America/Winnipeg>,
~U[2020-03-15 00:02:03Z]}}
]
I hope that is not confusing more.