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/\.

Mario Trento 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!

···

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

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/\.

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/\.

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

···

On Mar 7, 2012, at 5:22 AM, Sylvester Keil wrote:

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

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:

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.

···

On Wed, Mar 07, 2012 at 08:28:33PM +0900, Wayne Brissette 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).

--
Chad Perrin [ 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 Wed, Mar 7, 2012 at 1:38 PM, Chad Perrin <code@apotheon.net> wrote:

On Wed, Mar 07, 2012 at 08:28:33PM +0900, Wayne Brissette 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.

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

Yeah, that too.

···

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

On Wed, Mar 7, 2012 at 1:38 PM, Chad Perrin <code@apotheon.net> wrote:
> On Wed, Mar 07, 2012 at 08:28:33PM +0900, Wayne Brissette 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.

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

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