【发布时间】:2020-06-19 12:07:02
【问题描述】:
我正在尝试将 UTC DateTime 转换为某些时区。我想知道将时区从 UTC 转换为所需时区的正确方法是什么。
例如。
- 1 到 n 六月。 2020 年 UTC
- 1 到 n 六月。 2020 年在“澳大利亚/布里斯班”中
此时区比 UTC 多 10 小时。
我有一个日期列表。
如
现在,每天都有几个小时。当您将一天从 UTC 转换为 "Australia/Brisbane" 时。像这样
iex(6)> Calendar.DateTime.from_erl!({{2020, 6, 7}, {0, 0, 0}}, "Etc/UTC") |> Calendar.DateTime.shift_zone!("Australia/Brisbane")
#DateTime<2020-06-07 10:00:00+10:00 AEST Australia/Brisbane>
iex(7)>
这基本上是正确的,这个方法应该做什么,但它有一些问题。
UTC 时区的一天,达到第 14 小时,例如
iex(7)> Calendar.DateTime.from_erl!({{2020, 6, 7}, {14, 0, 0}}, "Etc/UTC") |> Calendar.DateTime.shift_zone!("Australia/Brisbane")
#DateTime<2020-06-08 00:00:00+10:00 AEST Australia/Brisbane>
iex(8)>
Australia/Brisbane 不再是 6 月 7 日,而是 6 月 8 日。
我正在尝试在其中填充日历。
第 14 天有 2 个小时,例如 22 和 23,在 UTC 中是 6 月 14 日,但是当它们转移到 Australia/Brisbane。
当我想在月历中显示时,哪一天可用。有了这个
iex(6)> Calendar.DateTime.from_erl!({{2020, 6, 7}, {0, 0, 0}}, "Etc/UTC") |> Calendar.DateTime.shift_zone!("Australia/Brisbane")
#DateTime<2020-06-07 10:00:00+10:00 AEST Australia/Brisbane>
iex(7)>
这是对的,但因为它只有 22 和 23 小时,不是在 6 月 14 日,而是在Australia/Brisbane 时区,它们将在第二天。
我的问题是,将 UTC 日期转换为另一个时区的权利是什么
如果是+ve,则转到第二天,如果是-ve,则转到前一天。
我们如何将 UTC 日期转换为另一个时区,它也包括白班,或者有更好的处理方法吗?
【问题讨论】: