Convert string into datetime.time object
Asked Answered
S

4

104

Given the string in this format "HH:MM", for example "03:55", that represents 3 hours and 55 minutes.

I want to convert it to datetime.time object for easier manipulation. What would be the easiest way to do that?

Sopor answered 12/1, 2013 at 17:6 Comment(0)
L
163

Use datetime.datetime.strptime() and call .time() on the result:

>>> datetime.datetime.strptime('03:55', '%H:%M').time()
datetime.time(3, 55)

The first argument to .strptime() is the string to parse, the second is the expected format.

Ljubljana answered 12/1, 2013 at 17:9 Comment(2)
I have an issue where strptime assumes a date when using this method.Betatron
@user4933: strptime() doesn't assume anything. It doesn't guess, it doesn't have heuristics. It can only parse strings that match the exact format you give it. If you have unexpected output you need to fix your use of the method call.Ljubljana
P
20
>>> datetime.time(*map(int, '03:55'.split(':')))
datetime.time(3, 55)
Posse answered 12/1, 2013 at 17:10 Comment(0)
J
2

It is perhaps less clear to future readers, but the *map method is more than 10 times faster. See below and make an informed decision in your code. If calling this check many times and speed matters, go with the generator ("map").

In [31]: timeit(datetime.strptime('15:00', '%H:%M').time())
7.76 µs ± 111 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)


In [28]: timeit(dtime(*map(int, SHUTDOWN_AT.split(':'))))
696 ns ± 11.5 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
Jempty answered 9/2, 2021 at 9:20 Comment(0)
H
0

Simply load if as iso:

>>> from datetime import time
>>> time.fromisoformat("03:55")
datetime.time(3, 55)
Headon answered 27/11, 2022 at 10:49 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.