我在 Rails 中有一个 long 值134740800
,即自纪元以来的毫秒数。
如何将其转换为mm-dd-yyyy
格式的日期?
我认为格式化将通过类似的方式完成,strftime
但我似乎找不到将 long 转换为有效日期的正确方法。
我在 Rails 中有一个 long 值134740800
,即自纪元以来的毫秒数。
如何将其转换为mm-dd-yyyy
格式的日期?
我认为格式化将通过类似的方式完成,strftime
但我似乎找不到将 long 转换为有效日期的正确方法。
secs = 134740800/1000 # millisecs / 1000
t = Time.at(secs)
t.strftime("%m-%d-%Y")
输出
"01-02-1970"
试试这个:
require 'date'
DateTime.strptime("1318996912",'%s')
我假设您的意思是自纪元以来的秒数。
Time.at seconds_since_epoch
你也可以传递一个浮点数。如果您有毫秒,请先除以1000.0
。然后,您可以调用strftime
返回的Time
对象。
使用Time.at
:
irb(main):003:0> Time.at(134740800)
=> Tue Apr 09 08:00:00 -0400 1974
这是一个建议……看看一些答案的运行速度通常是个好主意。这是一个简单的基准:
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)