【问题标题】:ruby rails Database timeruby rails 数据库时间
【发布时间】:2017-03-06 14:46:00
【问题描述】:

我创建了一个以到达时间为时间的模型

create_table :trains do |t|
  t.time :arrival_time

我正在通过管理面板提供数据

form do |f|
  f.inputs " Journey start from " do
  f.collection_select :start_station_id, Station.all, :id, :name, {prompt:"Select start Station"}   
  f.input :arrival_time
  f.input :departure_time
end  

但是,数据库中时间列的输入以日期database view 保存。 如何防止使用日期来节省时间?

我只需要准时列

谢谢

【问题讨论】:

    标签: ruby database datetime time activeadmin


    【解决方案1】:

    使用:date 类型而不是:time

    :date : 只存储一个日期(年、月、日)

    :time :只存储一个时间(小时、分钟、秒)

    例如:

    create_table :trains do |t|
      t.date :arrival_time
    

    【讨论】:

    • 感谢您的回复。但是,我想节省时间到到达时间。
    【解决方案2】:

    我猜你使用 SQLite 作为数据库。如果是这种情况,即使您在迁移文件中指定t.time :arrival_time,SQLite 也会解析输入时间并将其存储在arrival_time 列中,格式为YYYY-MM-DD HH:MM:SS.SSS

    根据Date and Time Datatype of SQLite,它只会将日期和时间存储为TEXTREALINTEGER值。因此,当您尝试为arrival_time 列保留14:15 时,SQLite 将存储类似2000-01-01 14:15:00 的内容。

    我的偏好是将arrival_time 存储为字符串。如果我需要显示arrival_time,我可以使用Time.parse 将其转换为今天或我想要的另一天的时间。

    arrival_time = "14:15"
    today = Time.now
    # => 2019-04-26 22:14:08 +0700
    Time.parse(arrival_time)
    # => 2019-04-26 14:15:00 +0700
    
    specific_date = DateTime.new(2017, 03, 06)
    Time.parse(arrival_time, specific_date)
    # => 2017-03-06 14:15:00 +0700
    

    参考Time.parse

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      相关资源
      最近更新 更多