我在Rails中有一个很长的值,134740800
,这是自纪元以来的毫秒数。
如何将其转换为mm-dd-yyyy
格式的日期?
我认为格式化将使用类似strftime
的方式完成,但我似乎找不到将长方法转换为有效日期的正确方法。
答案 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)