Time. to_military_time?

Is there any time function to get military time:
eg.

tim=“0457”
Time.striptime(time,…) ==> 16:57

I found this sample below, it it works opposite, could not find any info
how to get reverse so I’ll get military format:

Thanks
Dai


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”

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

On Mar 7, 2012, at 10:00 AM, Robert K. wrote:

Mario T. wrote in post #1050518:

Is there any time function to get military time:
eg.

tim=“0457”
Time.striptime(time,…) ==> 16:57

Out of curiosity, isn’t ‘0457’ the same as 4:57 AM? If that’s the case,
then why wouldn’t the regular date parser do the job:

$ irb
001:0> require ‘time’
=> true
002:0> Time.strptime ‘0457’, ‘%H%M’
=> 2012-03-07 04:57:00 0100
003:0> Time.strptime ‘1657’, ‘%H%M’
=> 2012-03-07 16:57:00 0100

My apologies if I missed something obvious there!

Sorry, I missed the reply below, Robert, please ignore the follow-up.

On Wed, Mar 07, 2012 at 08:28:33PM +0900, Wayne B. wrote:

You are correct, and I was wondering the same thing. Unless he has some
OS that’s not giving him the universal (except in North America) 24
hour time and using AM and PM suffixes, but then I would think the
issue would be just as easy, add 12 to PM, put in the exception to when
midnight happens so you don’t end up with 2405 (unless that’s your
preference. In the Marines it was always 2400 for midnight and 0001 for
one minute past).

Somehow, I managed to never see midnightish times in print when I was in
the army, but everybody tended to pronounced it “oh-dark-hundred”
(obviously with somewhat humorous intent). This, to me at least, seems
to indicate 0000 for midnight, but I don’t have any actual memory of
something in print confirming that.

You are correct, and I was wondering the same thing. Unless he has some
OS that’s not giving him the universal (except in North America) 24 hour
time and using AM and PM suffixes, but then I would think the issue
would be just as easy, add 12 to PM, put in the exception to when
midnight happens so you don’t end up with 2405 (unless that’s your
preference. In the Marines it was always 2400 for midnight and 0001 for
one minute past).

Wayne

Thanks, all
I have this value as string “4:57PM”, and I have a function now, but
want to do it in simpler way: 4:57AM --> 16:57. This needed only for
“PM” time

Trying to do time.strptime now

Best
Dai

Sorry one more time for being not clear, I’m not taking this time from
os, I just need to convert it from external string:
<“4:57PM” ===> “16:57”

Dai

On Wed, Mar 7, 2012 at 1:38 PM, Chad P. [email protected] wrote:

the army, but everybody tended to pronounced it “oh-dark-hundred”
(obviously with somewhat humorous intent). This, to me at least, seems
to indicate 0000 for midnight, but I don’t have any actual memory of
something in print confirming that.


Chad P. [ original content licensed OWL: http://owl.apotheon.org ]

I set most of my clocks to twenty-four hour time and they all display
midnight as 0000.

On Thu, Mar 15, 2012 at 07:48:34AM +0900, Kevin wrote:

Mario T. wrote in post #1050601:

Thanks, all
I have this value as string “4:57PM”, and I have a function now, but
want to do it in simpler way: 4:57AM --> 16:57. This needed only for
“PM” time

t = Time.parse(“4:57PM”)
=> Thu Mar 15 16:57:00 +0000 2012

t.strftime("%H%M")
=> “1657”

But you’re actually doing more work than needed, because it’s working
out the number of seconds since midnight on Jan 1st 1970 for that
particular time today

t.to_i
=> 1331830620

… and then converting back to local time and then just extracting the
hours and minutes.