ruby strftime 给出错误的时间

标签 ruby time

例如,时间戳是1403667010.574,使用Time.at(1403667010.574).strftime('%Y-%m-%d %H:%M:%S.%L %z'),则结果为

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

它在结果上损失了 1 毫秒。那是 ruby 的错误吗?

对我来说,主要问题是,如果我将时间字符串转换为 Time.parse("2014-06-25 03:30:10.573 +0000").to_f,结果将是变为 1403667010.573。它不等于原始值

最佳答案

这就是 float 的工作原理。它们大致精确(并非绝对)。

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 - Millisecond of the second (000..999) The digits under millisecond are truncated to not produce 1000.

因此,值 .573999 被截断(未四舍五入)为 .573

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

相关文章:

ruby-on-rails - Nodejs 和 Ruby 中的加密

ruby - 单例方法有什么用?

ruby - sass 编译错误 - StalenessChecker::Mutex (NameError)

java - 你如何在android中让代码暂停几秒钟?

javascript - 什么是好的 Javascript 时间选择器?

Ruby Mail,如何实现SSL邮件

mysql - 从 MySQL 结果分配 BOOL

string - 显示没有毫秒的 CFGregorianDate

datetime - 如何使用谷歌分析API检索今日数据

python - 制作一个简单的《太空侵略者》克隆——pygame.time.delay 导致崩溃