我正在尝试让我的应用程序将时间缩短到毫秒(例如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不是一种选择。
答案 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")
或者你可以根据需要在你的例子中使用它......