我需要以这种格式保存日期时间属性:YYYY-MM-DD HH:SS。我在数据库中有一个日期时间字段:
schema.rb:
create_table "stats", force: :cascade do |t|
...
t.datetime "check_time"
end
params 中的数据如下所示:
{"check_time"=>"2018-01-02 04:57"}
但是它在数据库中保存为 2018-01-02 04:43:00 UTC:
Stat.last.check_time #=> check_time: "2018-01-02 04:43:00"
(所以最后有几秒钟)
然后在我的 "/status"
端点中,我将统计数据作为 JSON 返回:
get '/status' do
{ stats: Stat.last }.to_json
end
然后 check_time 看起来像这样:
"check_time":"2018-01-02T04:43:00.000Z"
这是怎么回事?我在这里错过了什么吗?数据库中是否有错误的数据类型字段?
最佳答案
ActiveRecord 将列转换为 DateTime 对象,由 ActiveSupport 扩展(融入 Rails)
你要查找的是 strftime
或 to_formatted_s
(别名为 to_s
。)
引用这里http://api.rubyonrails.org/v5.1/classes/DateTime.html#method-i-to_formatted_s和 http://foragoodstrftime.com
没有必要乱用 ActiveRecord 编写器方法,除非您真的知道自己在做什么,否则永远不要那样做。您不需要以特定格式将其保存到数据库中——当时是一种非标准格式——只需在需要时对其进行格式化并保留数据库的日期时间式列的所有优点。
关于ActiveRecord 数据库中的 Ruby 日期时间格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48055488/