Mario T. wrote in post #1050518:
Is there any time function to get military time:
eg.
tim=“0457”
Time.striptime(time,…) ==> 16:57
You can create a Time from individual fields:
irb(main):004:0> Time.mktime 2012,3,10,10,11,12
=> 2012-03-10 10:11:12 +0100
You can use that to parse yourself and create the time object, e.g.
def mt(s)
raise “Not military #{s.inspect}” unless /\A(\d{2})(\d{2})\z/ =~ s
h = ($1.to_i + 12) % 24 # correct?
m = $2.to_i
now = Time.now
Time.mktime now.year, now.month, now.day, h, m
end
irb(main):021:0> mt “0457”
=> 2012-03-07 16:57:00 +0100
Of course you can also change that to work with numbers if you prefer
def mt(n)
raise “Not military #{s.inspect}” unless Integer === n
h, m = n.divmod 100
h = (h + 12) % 24 # correct?
now = Time.now
Time.mktime now.year, now.month, now.day, h, m
end
irb(main):029:0> mt 457
=> 2012-03-07 16:57:00 +0100
Please note that numbers with leading 0 are octal:
irb(main):030:0> 0457
=> 303
I found this sample below, it it works opposite, could not find any info
how to get reverse so I’ll get military format:
def format_time(time)
normalize time
time = time.to_s.rjust(4, ‘0’) if time[0] !~ /[12]/
time = time.to_s.ljust(4, ‘0’) if time[0] =~ /[12]/
puts “New_time=” + time.to_s
Time.strptime(time, ‘%H%M’).strftime(’%l:%M’).strip
end
time = 1630
p format_time(time) # “4:30”
That just looks awful since it works with strings instead using Time
properly.
Kind regards
robert