我正在使用 Ruby 生成类似于 Java 的 64 位时间戳。我经历了Class:Time它说时间可以使用 63 位整数。我以为我可以使用:
Time.now.to_f * 1000
但我担心由于浮点转换而失去精度。我能否像 Java 中的 ruby 一样尽可能精确地获取 64 位时间戳(自纪元以来的毫秒数)?
Calendar.getInstance().getTimeInMillis();
我需要使用时间戳作为数据库中的唯一 ID,因此我希望将与时间相关的冲突从最少到不存在。
最佳答案
我已经添加了评论,表明这确实不是您应该做的事情,但我真的认为您不需要担心以任何有意义的方式失去精度。 Ruby 文档声明该值存储到纳秒级。将其转换为 float 可能会丢失最后几位数字,但在毫秒级别上不会很重要——你真的不关心这个值是向上还是向下一点,毕竟……你是已经依赖于每毫秒仅创建一个条目。
另一种方法是使用 to_i
和 nsec
:将 to_i
的结果乘以 1000,除以 的结果nsec
乘以 1000000,并将两者相加。这将使您仅使用整数运算即可获得毫秒数。
关于java - Ruby 相当于 64 位的 Calendar.getInstance().getTimeInMillis(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18757558/