2

我在 Rails 中有一个 long 值134740800,即自纪元以来的毫秒数。

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

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

4

5 回答 5

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

输出

"01-02-1970"
于 2012-09-13T17:18:04.610 回答
2

试试这个:

require 'date'
DateTime.strptime("1318996912",'%s')
于 2012-09-13T17:14:23.843 回答
2

我假设您的意思是自纪元以来的秒数。

Time.at seconds_since_epoch

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

于 2012-09-13T17:15:19.863 回答
1

使用Time.at

irb(main):003:0> Time.at(134740800)
=> Tue Apr 09 08:00:00 -0400 1974
于 2012-09-13T17:14:45.947 回答
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)
于 2012-09-13T18:08:41.783 回答