如何将长期转换为日期?

时间:2012-09-13 17:12:15

标签: ruby-on-rails ruby date datetime

我在Rails中有一个很长的值,134740800,这是自纪元以来的毫秒数。

如何将其转换为mm-dd-yyyy格式的日期?

我认为格式化将使用类似strftime的方式完成,但我似乎找不到将长方法转换为有效日期的正确方法。

5 个答案:

答案 0 :(得分:6)

secs = 134740800/1000 # millisecs / 1000
t = Time.at(secs)
t.strftime("%m-%d-%Y")

输出

"01-02-1970"

答案 1 :(得分:2)

试试这个:

require 'date'
DateTime.strptime("1318996912",'%s')

答案 2 :(得分:2)

我认为你的意思是自纪元以来的几秒钟。

Time.at seconds_since_epoch

你也可以传递一个浮动。如果你有毫秒,首先除以1000.0。 然后,您可以在返回的strftime对象上调用Time

答案 3 :(得分:1)

使用Time.at

irb(main):003:0> Time.at(134740800)
=> Tue Apr 09 08:00:00 -0400 1974

答案 4 :(得分:0)

这是一个建议......看一些答案的运行速度通常是一个好主意。这是一个简单的基准:

require 'benchmark'
require 'date'

SECS = 134740800
LOOPS = 1_000_000

puts Time.at(SECS).strftime('%m-%d-%Y')
puts Date.strptime(SECS.to_s, '%s').strftime('%m-%d-%Y')

Benchmark.bm(14) do |x|
  x.report('Time.at:') { LOOPS.times { Time.at(SECS) }}
  x.report('Date.strptime:') { LOOPS.times { Date.strptime(SECS.to_s, '%s') }}
end

输出是:

04-09-1974
04-09-1974
                     user     system      total        real
Time.at:         0.370000   0.020000   0.390000 (  0.392761)
Date.strptime:   6.320000   0.050000   6.370000 (  6.373248)