Ruby:将时间转换为秒?

Shp*_*ord 17 ruby time

如何将时间转换为10:30到秒?是否有某种内置的Ruby函数来处理它?

基本上试图计算从午夜(00:00)到当天特定时间(例如10:30或18:45)的秒数.

Dan*_*uis 30

您可以使用DateTime#parse将字符串转换为DateTime对象,然后将小时乘以3600并将分钟乘以60以获得秒数:

require 'date'

# DateTime.parse throws ArgumentError if it can't parse the string
if dt = DateTime.parse("10:30") rescue false 
  seconds = dt.hour * 3600 + dt.min * 60 #=> 37800
end
Run Code Online (Sandbox Code Playgroud)

正如jleedev在评论中指出的那样,Time#seconds_since_midnight如果你有ActiveSupport ,你也可以使用:

require 'active_support'
Time.parse("10:30").seconds_since_midnight #=> 37800.0
Run Code Online (Sandbox Code Playgroud)

  • 此外,还有一个`seconds_since_midnight`方法. (4认同)

Der*_*rek 9

内置时间库扩展了Time类以解析字符串,因此您可以使用它.它们最终表现为自UNIX纪元以来的秒数,因此转换为整数和减去应该可以得到你想要的东西.

require 'time'
m = Time.parse('00:00')
t = Time.parse('10:30')

(t.to_i - m.to_i)
=> 37800
Run Code Online (Sandbox Code Playgroud)

ActiveSupport中还有一些糖来处理这些类型的事情.


Ted*_*ddy 9

又一个实施:

Time.now.to_i - Date.today.to_time.to_i # seconds since midnight
Run Code Online (Sandbox Code Playgroud)