【问题标题】:Elixir - Timex detecting when British Summer Time starts and endsElixir - Timex 检测英国夏令时的开始和结束时间
【发布时间】:2019-04-23 14:04:16
【问题描述】:

我发现Timex.Timezone.convert(t, "Europe/London") 返回一个DateTime 对象,格式如下:#<DateTime(2019-04-24T17:00:00 Europe/London (+01:00:00))>。我的问题是BST在10月结束时,Timex.Timezone.convert(t, "Europe/London")会自动调整并返回UTC时间吗?

【问题讨论】:

  • 我希望如此,是的 - 或者更确切地说,如果它被要求转换一个不属于 BST 的值,我希望它返回一个 GMT 值。你有什么理由不能尝试吗?我假设t 是现有的日期/时间值?我不是 Elixir 程序员,所以我可能遗漏了一些东西,但时区转换根本不应该依赖于 当前 日期/时间。
  • @JonSkeet 它根本不依赖于当前日期。我只是想知道 Timex 如何执行夏令时区域的转换。
  • 手动创建一个11月的日期并尝试转换如何?
  • 我希望它返回带有“Europe/London (+0:00:00)”或类似的东西。但绝对值得一试 - 如果它不是你所期望的,你的问题可以更具体。
  • 正如乔恩所说,它应该可以工作。当 tzdata 应用程序(timex 的一个依赖项)启动时,它将从iana.org/time-zones 下载信息。然后,它将该信息存储在 timex 用于进行转换的 ets 表中。 tzdata 还会定期更新此信息,因此您的应用程序可以无限期地运行并且仍然拥有最新的时区信息。

标签: timezone elixir timex


【解决方案1】:

是的,它将返回 +00:00 GMT Europe/London 而不是 +01:00 BST Europe/London

按照 cmets 中的建议,很容易检查:假设 {:timex, "~> 3.0"} 作为依赖项添加,运行

$iex -S mix
iex(1)> t = DateTime.from_naive!(~N[2019-11-01 13:26:08.003], "Etc/UTC")
#DateTime<2019-11-01 13:26:08.003Z>
iex(2)> Timex.Timezone.convert(t, "Europe/London")                      
#DateTime<2019-11-01 13:26:08.003+00:00 GMT Europe/London>
iex(3)> t = DateTime.from_naive!(~N[2019-10-01 13:26:08.003], "Etc/UTC")
#DateTime<2019-10-01 13:26:08.003Z>
iex(4)> Timex.Timezone.convert(t, "Europe/London")                      
#DateTime<2019-10-01 14:26:08.003+01:00 BST Europe/London>

【讨论】:

    猜你喜欢
    • 2018-07-06
    • 1970-01-01
    • 2010-09-22
    • 2019-09-29
    • 2015-11-23
    • 2014-08-13
    • 2018-11-07
    • 2019-06-16
    • 2011-03-10
    相关资源
    最近更新 更多