17

I need to convert milliseconds to seconds minute hours. I have code like

def convertMillis(millis):
    seconds=(milli/1000)%60
    minutes=(milli/(1000*60))%60
    hours=(milli/(1000*60*60))%24

    return

def main():
    milli=print(input("Enter time in milliseconds "))

    print(hours,":",minutes,":",seconds

main()

But it's not a very good solution.

I would like to know the most pythonic way to do something like

>>> convertmillis(5500)
0:0:5
wonton
  • 7,568
  • 9
  • 56
  • 93
  • You left out the `)` at the end of your `print` call. – zondo Mar 14 '16 at 14:05
  • Possible duplicate of [How to convert milliseconds into human readable form?](http://stackoverflow.com/questions/175554/how-to-convert-milliseconds-into-human-readable-form) – Andy Mar 14 '16 at 14:06
  • 1
    You can simplify `convertMillis()` by using `minutes, seconds = divmod(milli, 100)`, `hours, minutes = divmod(minutes, 60)`. Also, you aren't returning anything. You should say `return (hours, minutes, seconds)`. Also, in `main()`, you define `milli` as the returns of `print()`. `print()` always returns None. You can just take the `print(` from the beginning and `)` from the end. Also, to print it, use `print(":".join(convertMillis(int(milli))))` – zondo Mar 14 '16 at 14:08
  • 1
    `import datetime` then in your function: `duration = datetime.timedelta(milliseconds=millis)` and finally: `return (duration.hours, duration.minutes, duration.seconds)` – Ctrl-C Feb 09 '20 at 12:37
  • You should remove `% 24` for hours if you want a bigger number (i needed to count how many hours i worked and it was > 24) – Olivier Pons Aug 27 '21 at 18:20

2 Answers2

33

If You want one single function:

millis=input("Enter time in milliseconds ")
millis = int(millis)
seconds=(millis/1000)%60
seconds = int(seconds)
minutes=(millis/(1000*60))%60
minutes = int(minutes)
hours=(millis/(1000*60*60))%24

print ("%d:%d:%d" % (hours, minutes, seconds))
Nicolas Gervais
  • 33,817
  • 13
  • 115
  • 143
lunaferie
  • 401
  • 3
  • 7
6

Try this:

 def convertMillis(millis):
     seconds=int(millis/1000)%60
     minutes=int(millis/(1000*60))%60
     hours=int(millis/(1000*60*60))%24
     return seconds, minutes, hours
 
 def main():
     millis=input("Enter time in milliseconds ")
     con_sec, con_min, con_hour = convertMillis(int(millis))
     print(f"{con_hour:02d}:{con_min:02d}:{con_sec:02d}")
 
 main()

The problems seem to be:

  1. You lack the understanding of local and global variables. Just because a variable is in your convertMillis doesn't mean main will get to read it. You have to explicitly return them.
  2. You misunderstood the syntax of print, input and return
Gerhard Powell
  • 5,965
  • 5
  • 48
  • 59
Bernardo Meurer
  • 2,295
  • 5
  • 31
  • 52