convert seconds to hours:minutes:seconds

Discussion in 'Ruby' started by `p, Dec 14, 2005.

  1. `p

    `p Guest

    hello!
    i am trying to convert a number of seconds to a nicely formatted string
    like this:

    7683 seconds = 02:08:03

    is there an easy way to accomplish this?
    `p, Dec 14, 2005
    #1
    1. Advertising

  2. `p

    Chris Pine Guest

    On 12/14/05, `p <> wrote:
    > hello!
    > i am trying to convert a number of seconds to a nicely formatted string
    > like this:
    >
    > 7683 seconds =3D 02:08:03


    Well, assuming you know how to arithmetic, conversions, and string
    concatenation (and if not, check out http://pine.fm/LearnToProgram/),
    all you're missing is how to pad with zeroes.

    I do talk about the rjust method, but not that you can use it to pad
    with things other than spaces:

    2.to_s.rjust(5,'0')

    This pads the string '2' (from 2.to_s) with the string '0'.

    Another, fancier (or just more complicated? :) way:

    irb(main):001:0> '%.5d' % 2
    =3D> "00002"

    Hope that helps,

    Chris
    Chris Pine, Dec 14, 2005
    #2
    1. Advertising

  3. As long as you dont go past 24 hours you can use the Time class:

    irb(main):016:0> Time.at(7683).gmtime.strftime('%R:%S')
    =3D> "02:08:03"

    If you dont use gmtime, it will go based off your localtime, where the
    epoch =3D the offset from GMT.

    also by doing the arithmatic:
    irb(main):023:0> time =3D 7683
    =3D> 7683
    irb(main):024:0> hours =3D time/3600.to_i
    =3D> 2
    irb(main):025:0> minutes =3D (time/60 - hours * 60).to_i
    =3D> 8
    irb(main):026:0> seconds =3D (time - (minutes * 60 + hours * 3600))
    =3D> 3
    irb(main):030:0> printf("%02d:%02d:%02d\n", hours, minutes, seconds)
    02:08:03
    =3D> nil

    HTH
    - Andy Delcambre

    On 12/14/05, `p <> wrote:
    > hello!
    > i am trying to convert a number of seconds to a nicely formatted string
    > like this:
    >
    > 7683 seconds =3D 02:08:03
    >
    > is there an easy way to accomplish this?
    >
    >
    Andy Delcambre, Dec 14, 2005
    #3
  4. `p

    `p Guest

    Andy Delcambre wrote:
    > As long as you dont go past 24 hours you can use the Time class:
    >
    > irb(main):016:0> Time.at(7683).gmtime.strftime('%R:%S')
    > => "02:08:03"


    hey thanks! that's what i was looking for.
    `p, Dec 14, 2005
    #4
  5. `p

    Steve Litt Guest

    On Wednesday 14 December 2005 05:21 am, Andy Delcambre wrote:
    > As long as you dont go past 24 hours you can use the Time class:
    >
    > irb(main):016:0> Time.at(7683).gmtime.strftime('%R:%S')
    > => "02:08:03"


    Next question: How do I get the number of seconds since Epoch?

    SteveT

    Steve Litt
    http://www.troubleshooters.com
    Steve Litt, Dec 14, 2005
    #5
  6. `p

    `p Guest

    Steve Litt wrote:
    > On Wednesday 14 December 2005 05:21 am, Andy Delcambre wrote:
    >
    >>As long as you dont go past 24 hours you can use the Time class:
    >>
    >>irb(main):016:0> Time.at(7683).gmtime.strftime('%R:%S')
    >>=> "02:08:03"

    >
    >
    > Next question: How do I get the number of seconds since Epoch?


    time.to_i
    http://www.ruby-doc.org/core/classes/Time.html#M000196
    `p, Dec 14, 2005
    #6
  7. On Dec 14, 2005, at 8:09 AM, Steve Litt wrote:

    > #!/usr/bin/ruby
    > b4 = Time.new
    > sleep(3)
    > after = Time.new
    > interval = after.to_i - b4.to_i


    You can just subtract normally. Time knows what to do:

    interval = after - b4

    > print "Started at ", b4.asctime, ", ended at ", after.asctime
    > print "\n Interval is ", interval.to_s, ".\n"


    It's a good idea to get into the habit of using interpolation with
    Ruby. That let's Ruby take care of stringifying your values. We can
    also lose those \n characters:

    puts "Started at #{b4} and ended at #{after}."
    puts "Interval is #{interval}."

    James Edward Gray II
    James Edward Gray II, Dec 14, 2005
    #7
  8. `p

    Steve Litt Guest

    On Wednesday 14 December 2005 09:21 am, James Edward Gray II wrote:
    > On Dec 14, 2005, at 8:09 AM, Steve Litt wrote:
    > > #!/usr/bin/ruby
    > > b4 = Time.new
    > > sleep(3)
    > > after = Time.new
    > > interval = after.to_i - b4.to_i

    >
    > You can just subtract normally. Time knows what to do:
    >
    > interval = after - b4
    >
    > > print "Started at ", b4.asctime, ", ended at ", after.asctime
    > > print "\n Interval is ", interval.to_s, ".\n"

    >
    > It's a good idea to get into the habit of using interpolation
    > with Ruby. That let's Ruby take care of stringifying your
    > values. We can also lose those \n characters:
    >
    > puts "Started at #{b4} and ended at #{after}."
    > puts "Interval is #{interval}."


    Confirmed! That's much cleaner. I've been looking for something like
    that, and didn't want to kill a kitten by using printf() :)

    Thanks

    SteveT

    Steve Litt
    http://www.troubleshooters.com
    Steve Litt, Dec 14, 2005
    #8
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. tshad
    Replies:
    7
    Views:
    16,920
    tshad
    Mar 11, 2005
  2. 00_CP_D12
    Replies:
    3
    Views:
    8,882
    dilipv
    Feb 22, 2008
  3. Stu
    Replies:
    7
    Views:
    1,731
    Dave Thompson
    Mar 7, 2005
  4. Eric

    Time Format in datagrid (Hours, Minutes, Seconds)

    Eric, Aug 12, 2004, in forum: ASP .Net Datagrid Control
    Replies:
    1
    Views:
    274
    Alvin Bruney [MVP]
    Aug 12, 2004
  5. lemonhead71
    Replies:
    0
    Views:
    1,356
    lemonhead71
    Oct 3, 2012
Loading...

Share This Page