gpt4 book ai didi

elixir - 为 UTC `FunctionClauseError` 调用 `Timex.Timezone.resolve/3` 时,`Timex.Timezone.get/2` 中出现 `DateTime` 错误

转载 作者:行者123 更新时间:2023-12-02 07:06:37 25 4
gpt4 key购买 nike

我有(我怀疑是)UTC 日期时间。我想将其转换为我的本地时间(该日期时间的名为 America/New_York 的时区)。

我试图关注the Timex docs :

> timezone = Timezone.get("America/Chicago", Timex.now)
#<TimezoneInfo(America/Chicago - CDT (-06:00:00))>

> Timezone.convert(datetime, timezone)
#<DateTime(2016-02-29T06:30:30.120-06:00 America/Chicago)>

为什么下面显示的第三个命令会引发错误?

iex(1)> ~N[2019-12-02 16:27:18]                
~N[2019-12-02 16:27:18]
iex(2)> DateTime.from_naive(v(1), "Etc/UTC")
{:ok, #DateTime<2019-12-02 16:27:18Z>}
iex(3)> timezone = Timex.Timezone.get("America/New_York", v(2))
** (FunctionClauseError) no function clause matching in Timex.Timezone.resolve/3

The following arguments were given to Timex.Timezone.resolve/3:

# 1
"America/New_York"

# 2
{:error, :invalid_date}

# 3
:wall

Attempted function clauses (showing 1 out of 1):

def resolve(name, seconds_from_zeroyear, utc_or_wall) when is_binary(name) and is_integer(seconds_from_zeroyear) and (utc_or_wall === :wall or utc_or_wall === :utc)

(timex) lib/timezone/timezone.ex:356: Timex.Timezone.resolve/3
iex(3)> timezone = Timex.Timezone.get("America/New_York")
#<TimezoneInfo(America/New_York - EST (-05:00:00))>

第四个命令有效,但“时区”(具有相同名称)现在对于任何日期时间并不总是“相同”时区。但这似乎含糊不清。 The Wikipedia article listing the tz database time zones状态:

The UTC DST offset is different from the UTC offset for zones where daylight saving time is observed (see individual time zone pages for details).

这意味着时区(相对)是“固定的”;任何给定时区的任何特定日期时间的偏移量都是不同的。

但如果这是真的,那么令人困惑的是 Timex.Timezone.get/2 甚至接受日期时间值作为参数。为什么时区名称不仅足够而且完全全面?通过名称和日期时间检索时区有什么意义?

最佳答案

我是个白痴!

在失败的命令中:

timezone = Timex.Timezone.get("America/New_York", v(2))

v(2)值为 {:ok, #DateTime<2019-12-02 16:27:18Z>} ,即它是一个包含 DateTime 的元组包含 .

我应该做什么:

iex(5)> {:ok, datetime} = v(2)
{:ok, #DateTime<2019-12-02 16:27:18Z>}
iex(6)> timezone = Timex.Timezone.get("America/New_York", datetime)
#<TimezoneInfo(America/New_York - EST (-05:00:00))>
iex(7)> Timex.Timezone.convert(datetime, timezone)
#DateTime<2019-12-02 11:27:18-05:00 EST America/New_York>

关于elixir - 为 UTC `FunctionClauseError` 调用 `Timex.Timezone.resolve/3` 时,`Timex.Timezone.get/2` 中出现 `DateTime` 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59413966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com