在Ruby中转换军事时间

B. *_*ess 3 ruby format time

在Ruby中将军事(24小时)转换为HH:MM格式的最简单方法是什么?

我有两个24小时的时间值存储在一个记录中,我想在视图中显示它们,如"2:00 - 4:00",当以两个整数值(例如1400和1600)开始时.

我的hack-y解决方案是创建一个辅助函数:

    def format_time(time)
       if (time-1200 < 1000)
            if (time-1200 < 100)
                return time.to_s.insert(2, ":")
            else
                return (time-1200).to_s.insert(1, ":")
            end 
        else
            return (time-1200).to_s.insert(2, ":")              
        end         
    end
Run Code Online (Sandbox Code Playgroud)

我甚至不确定它是否一直有效.我假设有更好的方法来做到这一点.

更新:我还需要这个来处理不以'00'结尾的值.IE 1430或830.

knu*_*nut 7

您可以解析字符串Time.strptime以获取时间对象.这可以用于打印Time.strftime:

require 'time'

%w{1400 1600}.each{|t|
  p Time.strptime(t, '%H%M').strftime('%l:%M')
}
Run Code Online (Sandbox Code Playgroud)

优点:输入和输出格式的变化非常简单.

替代方案:

require 'date'  #load DateTime.strptime

%w{1400 1600}.each{|t|
  p DateTime.strptime(t, '%H%M').strftime('%l:%M')
}
Run Code Online (Sandbox Code Playgroud)

我希望DateTime的解决方案也适用于ruby 1.8.

更新830:此解决方案无法使用830- strptime无法解决%l.但是0830工作正常.在这种情况下,您需要一个适应的解决方

require 'date'  #load DateTime

%w{1400 1600 830}.each{|t|
  t = '%04i' % t
  p DateTime.strptime(t, '%H%M').strftime('%l:%M')
}
Run Code Online (Sandbox Code Playgroud)