例如,timestamp是1403667010.574,使用Time.at(1403667010.574).strftime('%Y-%m-%d %H:%M:%S.%L %z'),然后resuit是

"2014-06-25 03:30:10.573 +0000"

结果损失了1毫秒。那是红宝石虫吗?
对我来说,主要的问题是,如果我通过Time.parse("2014-06-25 03:30:10.573 +0000").to_f转换时间字符串,结果将变为1403667010.573。它不等于原点值

最佳答案

这就是浮点数的工作原理它们近似精确(不是绝对的)。

t = Time.at(1403667010.574)
t.strftime('%Y-%m-%d %H:%M:%S.%L %z') # => "2014-06-25 07:30:10.573 +0400"

# more precision
t.strftime('%Y-%m-%d %H:%M:%S.%6N %z') # => "2014-06-25 07:30:10.573999 +0400"

# even more precision
t.strftime('%Y-%m-%d %H:%M:%S.%10N %z') # => "2014-06-25 07:30:10.5739998817 +0400"

此外,这就是Time#strftime documentation所说的%L标志:
%l-毫秒(000..999)
毫秒以下的数字被截断,不能产生1000。
因此,值.573999被简单地截断(不舍入)为.573

关于ruby - ruby strftime给错时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24405679/

10-10 07:23