无法将毫秒转换为格式良好的小时、分钟和秒字符串

Having trouble converting milliseconds to a nicely formatted hours, minutes, and seconds string

我正在使用 Rails 4.2.3。我想以毫秒为单位(持续时间,而不是 UTC 时间)并将其转换为小时、分钟和秒。我正在尝试这个

    Time.at(time_in_ms).utc.strftime("%H:%M:%S") 

但这似乎不起作用。例如,在我的 POStGresql 数据库中,我有这个毫秒数

3601000

上面正在生成

16:16:40

即使它应该产生类似“1:00:01”(一小时零一秒)的结果。将以毫秒为单位的时间转换为格式正确的小时、分钟和秒的正确方法是什么?

Time.at() 预计在 之后 某个纪元 - 1970 年 1 月 1 日 00:00:00 UTC -所以您的代码需要先将 ms 数字除以 1000:

Time.at(time_in_ms/1000).utc.strftime("%H:%M:%S") 

编辑: 我刚刚重新检查了 Ruby 文档:下面的骑手 不正确 !假定传入的秒数采用 UTC,因此 at() 进行计算,然后考虑 UTC 偏移量。上面的 .utc 取消了因式分解,并且是必需的。


当然,该代码的问题将成为您当前的时区。假设您使用的是 UTC-5(纽约时间):Time.at(3601000/1000) 变为 "01:00:01" 当地时间。将其转换为 UTC 将从小时数字中减去五个小时,使其成为 "20:00:01"。因此,也删除您的 .utc 转换:

Time.at(time_in_ms/1000).strftime("%H:%M:%S")