Rails中的Time数据类型

时间:2016-04-13 17:19:20

标签: ruby-on-rails ruby database

我使用带stime属性的rails创建了一个数据库(指的是开始时间)。它的类型是Time。当我添加记录时:

stime = "10:10"

它已被添加为:

"stime":"2000-0101T10:10:00.000Z"

我只想要时间,而不是日期。我认为这是TimeDateTime之间的区别。谁能告诉我这是什么问题?

2 个答案:

答案 0 :(得分:3)

正如文件所述,它不是。

  

时间是日期和时间的抽象。时间存储在内部   作为1月1日以来的分数的秒数,   1970 00:00 UTC。

你可以做几件事:

  • 将其存储为字符串并执行正则表达式验证。
  • 如果您使用Postgres并且根本不介意,可以使用time类型。这样您就可以执行以下操作:YourModel.where("stime > '13:00:00'")
  • 以午夜为单位存储一天中的时间。这将要求您添加一些辅助方法来创建和查询数据的范围。您可能会发现ActiveSupport extension on numeric values有帮助。

答案 1 :(得分:3)

处理这个问题的一种方法是举例说明Uzbekjon的第三点,就是将整个时间段中的时间存储为午夜以来的秒数:

stime = Time.now
# => 2016-04-13 10:58:13 -0700
seconds = stime.seconds_since_midnight.to_i
# => 39493

然后,您可以检索此值并在需要时将其解析为时间:

time = Time.at(seconds).utc
# => 1970-01-01 10:58:13 UTC
result = time.strftime("%I:%M")
# => "10:58"

希望它有所帮助!