Ruby on rails 如何求整数和并将其转换为时间

Ruby on rails 如何求整数和并将其转换为时间,ruby-on-rails,ruby,time,Ruby On Rails,Ruby,Time,我有一个播放列表,里面有很多曲目。每个曲目的持续时间均为整数(以毫秒为单位)。 我要计算播放列表的总持续时间。实际上,我从我的播放列表模型中制作了如下内容: def total_tracks_duration seconds = tracks.sum(:duration) / 1000 Time.at(seconds).strftime("%H:%M:%S") end 播放列表规格: it '#total_tracks_duration' do play = b

我有一个播放列表,里面有很多曲目。每个曲目的持续时间均为整数(以毫秒为单位)。 我要计算播放列表的总持续时间。实际上,我从我的播放列表模型中制作了如下内容:

  def total_tracks_duration
    seconds = tracks.sum(:duration) / 1000
    Time.at(seconds).strftime("%H:%M:%S")
  end
播放列表规格:

it '#total_tracks_duration' do
    play = build(:playlist)
    3.times do
        create(:track, playlist: play, duration: 60000)
    end

    expect(play.total_tracks_duration).to eq("00:03:00")
end
最后我失败了:

    Failures:

  1) Playlist #total_tracks_duration
     Failure/Error: expect(play.total_tracks_duration).to eq("00:03:00")

       expected: "00:03:00"
            got: "01:00:00"

       (compared using ==)
     # ./spec/models/playlist_spec.rb:51:in `block (2 levels) in <top (required)>'

Finished in 0.69605 seconds (files took 9.83 seconds to load)
1 example, 1 failure
故障:
1) 播放列表#总曲目#持续时间
失败/错误:预期(播放。总曲目\u持续时间)。到eq(“00:03:00”)
预计:“00:03:00”
得到:“01:00:00”
(使用==进行比较)
#./spec/models/playlist_spec.rb:51:in'block(2层)in'
完成时间为0.69605秒(加载文件耗时9.83秒)
1例,1例失败

我哪里出错了?

这是为您的时区(UTC+1)添加了一个偏移量,所以只需这样做即可

Time.at(秒).utc.strftime(“%H:%M:%S”)


它应该会起作用:)

就我个人而言,我不认为
时间#at
是正确的路径,因为结果取决于TZ设置等-为什么不直接使用数学呢?至于为什么你没有得到预期的3m部件,我不知道该部件对我是否合适。您确定在执行此规范时没有创建其他轨迹吗?