ActiveRecords显示ISO8601时间戳

时间:2017-08-29 07:32:15

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

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

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

我使用ActiveRecord从Ruby / Sinatra环境访问数据库,但返回的是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调用中按预期正确格式化时间戳?

1 个答案:

答案 0 :(得分:0)

我认为这里存在一些误解:

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

  2. 我认为ActiveRecord会返回DateTime类或类似内容的实例,而不是该格式的字符串。

  3. 您看到的只是用于显示的格式;您可以使用strftime以其他格式显示数据。