【问题标题】:ActiveRecords display ISO8601 timestampActive Records 显示 ISO 8601 时间戳
【发布时间】:2017-08-29 07:32:14
【问题描述】:

我确实有一个包含时间戳的 postgres 数据库。此时间戳遵循 ISO 标准,如下所示:

2017-08-28 20:14:45.684926+00

我使用 ActiveRecord 从 Ruby/Sinatra 环境访问数据库,但返回的 ts 是 ISO8601。

有没有办法强制格式化为 ISO 而不是 ISO8601?

我想避免在收到数据后解析。

现在,我正在使用命令:

class ApiResponse < ActiveRecord::Base

  class << self

    def send_query(user, params)

      limit = params.include?('limit') ? params['limit'] : 50

      where_params = {
          userid: user,
          allowed_intent: true
      }

      ApiResponse.select([:id, :ts, :userid, :intent, :response])
          .where(where_params)
          .order(ts: :desc)
          .limit(limit).to_a

    end
end

ApiResponse 类用于通过 ActiveRecord 访问数据库,它工作正常。但格式不正确。它显示:

2017-08-29T05:58:44.488Z

而不是类似的东西

2017-08-28 20:14:45.684926+00

这种格式的 ISO 是 db 中的一种

知道如何在 ActiveRecord 调用中正确格式化时间戳 ts 吗?

【问题讨论】:

  • 什么是时间戳? ISO和iso有什么区别?什么是ts? iso8601和ISO8601有什么区别?
  • 什么是非ISO8601的iso格式,你想要的格式是什么?
  • @sawa ISO8601 看起来像:“2017-08-29T05:58:44.488Z”,Postgres Db 使用的 ISO 看起来像:“2017-08-28 20:14:45.684926+00”
  • @sawa 在 postgres 中,时间戳用于定义您创建元素的日期/时间
  • “有什么想法吗?”在 SO 上不是一个有效的问题。

标签: ruby-on-rails ruby postgresql activerecord rails-activerecord


【解决方案1】:

我认为这里有一些误解:

  1. Postgres 使用 ISO 8601 进行输出(所谓的 ISO,它们不是不同的标准)https://www.postgresql.org/docs/9.6/static/datatype-datetime.html

  2. 我假设 ActiveRecord 返回 DateTime 类或类似的实例,而不是该格式的字符串。

  3. 你看到的只是一种用于显示的格式;您可以使用strftime 以另一种格式显示数据。

【讨论】:

  • PG 类将格式返回为 PostGres 标准,即“2017-08-28 20:14:45.684926+00”。 ActiveRecords 遵循 ISO8601 格式。使用 strftime 意味着我将不得不解析数组的每个项目以更改格式,而且 JSON 解析耗时不是一个快速的过程。或者在那种情况下,有没有办法直接格式化结果 ActiveRecords 称为 ts.format 或 strftime(ts)...
  • 你的 ts 不是字符串,它是 datetime 的一个实例或类似的东西。显示的方式不是存储方式。如果你想让它转换成字符串,你可以用 strftime 转换并给出你想要的格式。
  • 是否可以让它在存储时显示。 ?我不熟悉strftime。您可以添加一个示例以获取如下格式:“2017-08-28 20:14:45.684926+00”
  • 你可能想要ts.strftime("%F %T.%L%z") (doc apidock.com/ruby/DateTime/strftime) 之类的东西
猜你喜欢
  • 2023-04-11
  • 2013-03-11
  • 1970-01-01
  • 2013-12-06
  • 1970-01-01
  • 1970-01-01
  • 2012-02-13
  • 2021-10-24
  • 1970-01-01
相关资源
最近更新 更多