【问题标题】:How to convert a long to date?如何转换长日期?
【发布时间】:2012-09-13 17:12:15
【问题描述】:

我在 Rails 中有一个 long 值,134740800,这是自 epoch 以来的毫秒数。

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

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

【问题讨论】:

  • sry 表示秒,Time.at 是我要找的,谢谢大家

标签: ruby-on-rails ruby date datetime


【解决方案1】:
secs = 134740800/1000 # millisecs / 1000
t = Time.at(secs)
t.strftime("%m-%d-%Y")

输出

"01-02-1970"

【讨论】:

    【解决方案2】:

    试试这个:

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

    【讨论】:

      【解决方案3】:

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

      Time.at seconds_since_epoch
      

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

      【讨论】:

        【解决方案4】:

        使用Time.at:

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

        【讨论】:

          【解决方案5】:

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

          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)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2022-01-25
            • 2013-09-19
            • 1970-01-01
            • 2013-01-02
            • 2019-02-20
            • 2018-10-22
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多