我正在尝试使用一天中的某个时间更新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
知道我该怎么做吗?
答案 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)>