2

Rails に134740800は、エポックからのミリ秒数である long 値があります。

mm-dd-yyyyそれを日付形式に変換するにはどうすればよいですか?

フォーマットは次のようなもので行われるとstrftime思いますが、ロングを有効な日付に変換する正しい方法が見つからないようです。

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 に答える