【问题标题】:Using ISO8601 dates in Ecto Timestamps在 Ecto 时间戳中使用 ISO8601 日期
【发布时间】:2017-10-27 13:25:06
【问题描述】:

Browsing through Ecto.DateTime,它似乎已被:naive_datetime 弃用。我想以最准确的表示形式存储时间戳,但我似乎找不到 :naive_datetime 为我提供的内容。据我所知,Ecto.DateTime 可以转换为 ISO8601,但它没有给出任何关于如何在数据库中存储幼稚日期时间的指示。

在创建时间戳时是否还有其他可能的选项可以指定:

schema "test" do 
  field :name
  timestamps type: :iso8601 # This doesn't work 
end 

我无法找到其他可能选项的列表。我被天真的日期时间困住了吗?

【问题讨论】:

    标签: date datetime elixir ecto


    【解决方案1】:

    NaiveDateTime 有什么问题?时间如何准确?只需确保您的服务器在 "Etc/UTC" 中运行,一切就绪。

    听起来你误解了iso8601 是什么:它只是一个字符串表示。此外,使用NaiveDateTime.to_iso8601/2 总是可能得到ISO8601NaiveDateTime 表示:

    NaiveDateTime.utc_now |> NaiveDateTime.to_iso8601
    #⇒ "2017-10-27T05:15:42.355701"
    

    不要害怕“幼稚”这个词。在这种情况下,它的意思是“它不存储时区”。仅此而已。

    【讨论】:

    • 是的,老实说,我只是不明白什么是幼稚的日期时间。如果您可以在答案中指定它,以及如何以这种方式设置服务器,我会继续检查它。我确定我只是错过了一些东西。作为参考,我正在处理一些时间敏感的数据,所以几秒钟的差异对我来说意义重大。
    • “在答案中指定”是什么意思?你害怕“天真”这个词吗?这是一个具有纳秒精度的系统时钟时间。
    • 是的,我不太明白“天真”在日期时间的上下文中是什么意思,对不起。
    • 顺便说一句,Elixir 核心是开源的:NaiveDateTime.
    • “naïve”在此上下文中的意思是“它不存储时区”。仅此而已。
    猜你喜欢
    • 2010-12-31
    • 2015-01-20
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 2014-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多