Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ruby strftime给出了错误的时间_Ruby_Time - Fatal编程技术网

ruby strftime给出了错误的时间

ruby strftime给出了错误的时间,ruby,time,Ruby,Time,例如,时间戳为1403667010.574,使用Time.at1403667010.574。strftime“%Y-%m-%d%H:%m:%S.%L%z”,则结果为 "2014-06-25 03:30:10.573 +0000" 它在结果上损失了1ms。那是ruby的bug吗 对我来说,主要的问题是,如果我按time.parse2014-06-25 03:30:10.573+0000.to_f转换时间字符串,结果将变成1403667010.573。它不等于原点值这是浮点数的工作原理。它们是近似

例如,时间戳为1403667010.574,使用Time.at1403667010.574。strftime“%Y-%m-%d%H:%m:%S.%L%z”,则结果为

"2014-06-25 03:30:10.573 +0000"
它在结果上损失了1ms。那是ruby的bug吗


对我来说,主要的问题是,如果我按time.parse2014-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"
此外,这是关于%L标志的说明:

%L-秒000..999中的毫秒 毫秒以下的数字被截断,不产生1000


因此,值.573999只是被截断而不是四舍五入到.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"
此外,这是关于%L标志的说明:

%L-秒000..999中的毫秒 毫秒以下的数字被截断,不产生1000


因此,值.573999只是被截断而不是四舍五入到.573

不,这不是ruby的错误。这是你的错误。不要把你的错误归咎于别人。更谦虚一点。使用Time.at1403667010,574000可以得到更精确的结果。不,这不是ruby的bug。这是你的错误。不要把你的错误归咎于别人。更谦虚一点。利用时间。at1403667010、574000可能会更精确result@sawa:如果没有浮点精度部分,就不清楚.573999是从哪里来的。@塞吉奥:我不知道为什么Time.parse2014-06-25 03:30:10.573+0000.usec可以得到正确的浮点部分574000,但是Time.at1403667010.574.usec无法573999@Yehudi:如果我想知道这一点,我会去看看Time.parse和Time.at的实现。有些不同。至少,一个接受字符串,另一个接受-anumber@sawa:如果没有浮点精度部分,就不清楚.573999是从哪里来的。@塞吉奥:我不知道为什么Time.parse2014-06-25 03:30:10.573+0000.usec可以得到正确的浮点部分574000,但是Time.at1403667010.574.usec无法573999@Yehudi:如果我想知道这一点,我会去看看Time.parse和Time.at的实现。有些不同。至少,一个接受字符串,另一个接受数字