Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 无法再将exto.DateTime.to_erl转换为_Elixir_Phoenix Framework_Ecto - Fatal编程技术网

Elixir 无法再将exto.DateTime.to_erl转换为

Elixir 无法再将exto.DateTime.to_erl转换为,elixir,phoenix-framework,ecto,Elixir,Phoenix Framework,Ecto,我的目标是找出以分钟为单位的时差: {_, {_, aaa, _}} = Ecto.DateTime.to_erl(d1) |> :calendar.time_difference(:calendar.universal_time) 我有一个从Postgresql检索到的时间戳: iex(13)> d1 ~N[2017-02-09 07:23:04.000000] 以前,这种方法效果很好: d11 = Ecto.DateTime.to_erl(d1) 但现在它抛出了一个异常:

我的目标是找出以分钟为单位的时差:

 {_, {_, aaa, _}} = Ecto.DateTime.to_erl(d1) |> :calendar.time_difference(:calendar.universal_time)
我有一个从Postgresql检索到的时间戳:

iex(13)> d1
~N[2017-02-09 07:23:04.000000]
以前,这种方法效果很好:

d11 = Ecto.DateTime.to_erl(d1)
但现在它抛出了一个异常:

* (FunctionClauseError) no function clause matching in Ecto.DateTime.to_erl/1
    (ecto) lib/ecto/date_time.ex:608: Ecto.DateTime.to_erl(~N[2017-02-09 07:23:04.000000])
如何解决这个问题


我不愿意使用诸如times之类的外部库。

出于某种原因,RDBMS中的
DateTime
值缺少时区信息。和之间有一个主要区别:前者关心时区,后者不关心(以及标准的erlang datetime)

从上面的代码片段中,您可能会看到,转换仍然可以进行


核心解决方案是找到RDBMS中具有naỉve datetime值的原因并修复它。

由于某些原因,RDBMS中的
datetime
值缺少时区信息。和之间有一个主要区别:前者关心时区,后者不关心(以及标准的erlang datetime)

从上面的代码片段中,您可能会看到,转换仍然可以进行


核心解决方案是找到RDBMS中具有naỉve datetime值的原因并修复它。

我不知道,但现在它以原始格式返回它。就我而言,RDBMS不生成值,它返回的正是存储的内容。这就是说,在应用程序的某个地方,您在那里存储了一个naỉve值。我强烈建议您找出原因,否则从长远来看,您肯定会遇到问题。以前,它在数据库中不使用毫秒来保存datetime,现在,在昏迷后的“秒”部分使用-6位数字。你知道为什么吗?我知道毫秒是什么,不,我不是算命的。您应该检查操作数据和执行写操作的代码。postgresql本身不存储时区信息,是吗?它只以utc格式存储所有时间戳。我不知道,但现在它以朴素的格式返回。就我而言,RDBMS不生成值,它只返回存储的内容。这就是说,在应用程序的某个地方,您在那里存储了一个naỉve值。我强烈建议您找出原因,否则从长远来看,您肯定会遇到问题。以前,它在数据库中不使用毫秒来保存datetime,现在,在昏迷后的“秒”部分使用-6位数字。你知道为什么吗?我知道毫秒是什么,不,我不是算命的。您应该检查操作数据和执行写操作的代码。postgresql本身不存储时区信息,是吗?它仅以utc格式存储所有时间戳。
iex(1)> d1 = ~N[2017-02-09 07:23:04.000000]
~N[2017-02-09 07:23:04.000000]
iex(2)> NaiveDateTime.to_erl d1
{{2017, 2, 9}, {7, 23, 4}}