例如,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/