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

Ruby on rails 4 无法将毫秒转换为格式良好的小时、分钟和秒字符串,ruby-on-rails-4,time,string-formatting,milliseconds,Ruby On Rails 4,Time,String Formatting,Milliseconds,我使用的是Rails 4.2.3。我想以毫秒为单位(持续时间,而不是UTC时间)并将其转换为小时、分钟和秒。我在试这个 Time.at(time_in_ms).utc.strftime("%H:%M:%S") 但这似乎不起作用。例如,在我的POstGresql数据库中,我有这个毫秒数 3601000 上述情况正在产生影响 16:16:40 即使它应该生成类似“1:00:01”(一小时零一秒)的内容。以毫秒为单位将时间转换为格式良好的小时、分钟和秒的正确方法是什么?时间。at()预

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

    Time.at(time_in_ms).utc.strftime("%H:%M:%S") 
但这似乎不起作用。例如,在我的POstGresql数据库中,我有这个毫秒数

3601000
上述情况正在产生影响

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

时间。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(纽约时间):
时间。at(3601000/1000)
变为
“01:00:01”
当地时间。将其转换为UTC将从小时数中减去五小时,使其成为
“20:00:01”
。因此,也要删除
.utc
转换:

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

您好,我尝试了您的第二个表达式,但结果是“3601000”时间的“20:00:01”,以毫秒为单位。应该是“1:00:01”,不是吗?你在哪个时区?你试过我的第一个表达吗?我的表达“3601000”是一个持续时间,而不是1970年以来的时间或其他短语。我想写一个格式化表达式,它将输出相同的数字,“1:00:01”,无论我在哪个时区,因为我不是指时钟时间本身。这有道理吗?绝对有道理!问题是,如果您不想自己编写时间混乱的代码(您可以这样做),而是想使用为您提供的功能,那么您必须处理它们的约束。A只要您不打印月份或年份,并且持续时间不超过31天,那么自1970年1月1日起的持续时间和时间是相同的。时区的废话是用
.utc
修正的啊,我听到你在说什么了。是的,第一个表达式非常有效。谢谢你的额外解释。