From: Robert Klemme Date: 2012-03-07T18:00:32+09:00 Subject: Re: Time. to_military_time? Mario Trento 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 -- Posted via http://www.ruby-forum.com/.