我有一个字符串时间戳:
ts = '1550989255.000300'
如何将ts
或Time
对象中的Datetime
解析为t
,并正确打印t.strftime('%6N')
?
我做到了:
t = Time.at(ts.to_f)
t.strftime '%6N' #=> "000299"
将时间戳转换为字符串时,Ruby会砍掉一微秒。
答案 0 :(得分:4)
您正在观察浮点数学错误。如果需要更高的精度,则应使用BigDecimal
。
require 'bigdecimal'
ts = BigDecimal('1550989255.000300')
t = Time.at(ts)
t.strftime '%6N'
=> "000300"
答案 1 :(得分:2)
比浮点数更精确,并且在Ruby中越来越多地使用它们。
ts = '1550989255.000300'
t = Time.at(ts.to_r) # to_r: a rational
p t.strftime '%6N' # => "000300"
答案 2 :(得分:1)
这有效:
ts = "1550989255.000300"
arr = ts.split('.')
t = Time.at(arr[0].to_i, arr[1].to_i)
t.strftime '%6N'