【问题标题】:Obtaining datetime value from database and getting its hour int从数据库中获取日期时间值并获取其小时 int
【发布时间】:2016-05-12 13:32:27
【问题描述】:

我是 Ruby/Ruby on Rails 的新手,我想知道是否可以从我的数据库中的 events 表中获取 datetime 条目 :starts_at 并从中获取仅代表小时值的整数?

日期时间':starts_at'的布局:

YYYY-MM-DD HH:MM:SS
e.g. 2016-01-03 11:05:00

我想要的只是代表小时的“11”,所以我可以将它设置为变量“start_hour”。

我不知道如何首先从数据库中获取我的:starts_at 值,但这里有一些代码尝试显示我的意思。

在做:

events.each do |event|
    start_time = event(:starts_at.hour) #is this how to obtain :starts_at?
end

将返回“11:00”而不是“11”,我如何将其缩小为“11”?如果时间是“08:00”,应该是“8”?

【问题讨论】:

  • event.starts_at 会给你分贝值。然后就可以使用 strftime 来得到想要的格式了
  • 我试过了,但我的 IDE 在starts_at 下划线说“找不到starts_at”
  • 在编写 ruby​​ 代码时,IDE 警告可能是错误的。运行测试或运行您的应用以检查它是否有效
  • 但它对任何其他领域都没有这样做,只是starts_at?好的,我会运行它

标签: ruby-on-rails ruby sqlite datetime


【解决方案1】:

event.starts_at 是 DateTime 对象。使用Time#strftime 获得所需的格式。例如:

event.starts_at.strftime("%H")

【讨论】:

  • event.starts_at 不返回 DateTime 对象。使用控制台中的 event.starts_at.class 进行验证。
【解决方案2】:

event.starts_at 返回一个 ActiveSupport::TimeWithZone 类的对象 它提供了一个“小时”阅读器:

event.starts_at.hour

但请注意,starts_at 也可能为 nil。所以如果你不能确保starts_at的存在,你最好使用类似的东西:

event.starts_at && event.starts_at.hour

【讨论】:

    猜你喜欢
    • 2023-04-10
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    相关资源
    最近更新 更多