Home > Enterprise >  Python - using strptime() to convert "20:52:30.0000000 02:00" into datetime
Python - using strptime() to convert "20:52:30.0000000 02:00" into datetime

Time:10-24

I'm trying to do something like this this:

time_str = "20:52:30.0000000 02:00"
time = datetime.strptime(time_str, "%H:%M:%S.%f%z")

But I'm getting the following error ValueError: time data '20:52:30.0000000 02:00' does not match format '%H:%M:%S.%f%z'. It's obvious that my format string is wrong, but I've gone through many stackoverflow threads while trying to find the correct one to no avail.

Is direct conversion even possible with the current input string format?

Thanks in advance

EDIT: As people mentioned in the comments, the timezone should be written as 0200 instead of 02:00. But if I change my code accordingly, I still get the same error:

time_str = "20:52:30.0000000 0200"
time = datetime.strptime(time_str, "%H:%M:%S.%f%z")

ValueError: time data '20:52:30.0000000 0200' does not match format '%H:%M:%S.%f%z'

You can try it here in online interpreter https://www.online-python.com/NXw90TtQJ8

CodePudding user response:

%f handles values in range: 000000 - 999999 (https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior)
Remove one zero from input string and your code should work

from datetime import datetime

time_str = "20:52:30.000000 0200"
time = datetime.strptime(time_str, "%H:%M:%S.%f%z")

Another way to do this is to add %w to strptime:

from datetime import datetime

time_str = "20:52:30.0000000 0200"
time = datetime.strptime(time_str, "%H:%M:%S.%w%f%z")

However, using %-variables changes the fields of an object time that is being created with strptime function.

In that case the last six numbers from "20:52:30.0[000000] 0200" would be used to set microseconds field, which you probably won't use.

Nevertheless, ask someone from whom you get the data to give you an explanation of the format the data has.

  • Related