【问题标题】:compare times with milliseconds用毫秒比较时间
【发布时间】:2015-07-24 08:59:46
【问题描述】:

我有两个日期,一个是开始日期,一个是结束日期。我想得到一个新的时间对象,这是两者之间的区别。我关心的差异是小时、分钟、秒和毫秒。我需要能够从包含毫秒差异的结果中创建一个新的 Time 对象

>> require 'time'
=> true
>> start_time = Time.parse '1970-01-01T00:00:00.200'
=> 1970-01-01 00:00:00 +0000
>> end_time = Time.parse '1970-01-01T01:01:01.400'
=> 1970-01-01 01:01:01 +0000
>> difference = Time.at(end_time - start_time)
=> 1970-01-01 01:01:01 +0000

我的问题是差异没有毫秒数

我可以通过运行看到时间有毫秒

>> difference.strftime('%H:%M:%S.%L')
=> "01:01:01.199"

但是我如何访问时差对象中的毫秒数。

当我在进行亚秒级计算时,我有毫秒很重要吗?

更新

我不认为我对这个问题的第一次尝试具有应有的描述性,对此我深表歉意。

【问题讨论】:

  • 1) start_date = 1970-01-01 00:00:01 +0000 不是有效的 Ruby。 2) 1970-01-01 00:00:01 +0000 也没有毫秒数。
  • 不,这是一个示例,我将使用实际代码进行更新

标签: ruby time


【解决方案1】:
require 'time'
a = Time.now
sleep(0.5)
b = Time.now
b - a
# => 0.505087

毫秒!

编辑:微秒!

【讨论】:

  • 您不必要求time
  • 试试Time#nsec。纳秒!
  • @cremno:是的。但是基本的Time 有点糟糕,如果我对时间做任何事情,我总是需要它。
  • @Mauris:是的,但我想我需要b.nsec - a.nsec。时差中的微秒精度。
  • Time 不限于微秒,它是你的系统时钟
【解决方案2】:

我的问题是差异没有毫秒数

确实有毫秒,Time#to_s / Time#inspect 只是没有显示。它的输出相当于:strftime "%Y-%m-%d %H:%M:%S %z"

如何访问时差对象中的毫秒数。

usec 返回微秒,nsec 返回纳秒:

time = Time.at(0.2)
time.usec #=> 200000
time.nsec #=> 200000000

您可以使用毫秒数

time.usec / 1000 #=> 200

【讨论】:

    【解决方案3】:

    Ruby 的Time 类具有纳秒精度:您可以使用Time#to_f 获取自Unix 纪元以来的小数秒数。如果你减去两个Time 对象,你会得到它们之间的小数秒数。因此,要获取两次之间的毫秒数,请尝试:

    ((time2 - time1) * 1000).to_i
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多