Sorry, I missed the reply below, Robert, please ignore the follow-up. On Mar 7, 2012, at 10:00 AM, Robert Klemme wrote: > 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/. >