在Ruby 1.8.7中显示时间缩短到毫秒

时间:2013-06-24 04:15:05

标签: ruby time

我正在尝试让我的应用程序将时间缩短到毫秒(例如11:37:53.231),但1.8.7中的strftime似乎没有它的选项({{ 3}})。在Ruby> = 1.9.3中,有%3N选项(http://ruby-doc.org/core-1.8.7/Time.html#method-i-strftime),但它不在1.8.7的文档中,并且似乎也不起作用。

这是我在Ruby 1.8.7中得到的输出。

cur_time = Time.now
# => Mon Jun 24 12:43:14 +0900 2013
cur_time.strftime('%H:%M:%S.%3N')
# => "12:43:14.%3N"

有替代解决方案吗?不幸的是,转向1.9.3不是一种选择。

5 个答案:

答案 0 :(得分:24)

我认为你可能正在寻找"%L",它会给你三位数的毫秒数。

cur_time.strftime('%H:%M:%S.%L')     #=> "12:34:56.789"

但是,我不确定旧版本的Ruby是否支持此功能。

答案 1 :(得分:9)

这样的事情怎么样:

class Time
  def to_milliseconds
    (self.to_f * 1000.0).to_i
  end
end

然后

some_time = Time.now
some_time.to_milliseconds # Time in milliseconds. It will be a big number

some_time.strftime("%H:%M:%S.#{some_time.to_milliseconds % 1000}") # Same as some_time.strftime('%H:%M:%S.%3N')

答案 2 :(得分:2)

基于此: 微秒等于1000纳秒或1 / 1,000毫秒 你可以先得到微秒:

tv_usec => int

仅返回时间的微秒数。

t = Time.now        #=> Wed Apr 09 08:56:04 CDT 2003

"%10.6f" % t.to_f   #=> "1049896564.259970"

t.usec              #=> 259970

然后除以1000

答案 3 :(得分:0)

FWIW我的解决方案是

time = Time.now #could be any time object
ms = time.to_f.to_s.split(".").last[0..2]
time.strftime("%H:%M:%S.#{ms}")

答案 4 :(得分:0)

对NicoSantangelo提供的答案进行了少量重构:

class Time
  def to_millisecond
     ((self.to_f * 1000.0).to_i) % 1000
  end
end

然后您可以像这样使用它来生成WS-security投诉时间戳:

time = Time.now
soap_timestamp = time.strftime("%FT%T.#{time.to_millisecond}Z")

或者你可以根据需要在你的例子中使用它......