将时间添加到DateTime对象

时间:2017-07-01 16:55:48

标签: ruby-on-rails ruby

我正在尝试使用一天中的某个时间更新DateTime对象。这是我目前正在尝试做的事情:

time_of_day = schedule.start_at.strftime("%H:%M:%S")
specific_day_of_next_month(schedule.start_at) + time_of_day

变量specific_day_of_next_month返回此值:

 => Thu, 27 Aug 2020 00:00:00 +0000

和time_of_day有此输出。

 => "14:45:53"

所以我基本上试图把它们放在一起。 但是当我运行时,我收到了这个错误:

TypeError: expected numeric

知道我该怎么做吗?

2 个答案:

答案 0 :(得分:1)

您可以使用DateTime#change。像这样:

time_arr = time_of_day.split(':')
h = {hour: time_arr[0].to_i, min: time_arr[1].to_i, sec:time_arr[2].to_i}

specific_day_of_next_month(schedule.start_at).change(h)

注意:我假设time_of_day为字符串,例如" 14:45:53"。

答案 1 :(得分:0)

require 'time'

dt = DateTime.new(2017, 8, 4)
time_to_add = "14:45:53"

hour, min, sec = time_to_add.split(":").map(&:to_i)
DateTime.new(dt.year, dt.month, dt.day, hour, min, sec)
  #=> #<DateTime: 2017-08-04T14:45:53+00:00 ((2457970j,53153s,0n),+0s,2299161j)>

(dt.to_time + [3600, 60, 1].zip(time_to_add.split(':')).
  reduce(0) { |tot,(sec,t)| tot + t.to_i*sec }).to_datetime 
  #=> #<DateTime: 2017-08-04T14:45:53+00:00 ((2457970j,53153s,0n),+0s,2299161j)>