mykhailohoy
mykhailohoy

Reputation: 482

Weirdly enough, '#' is a bad directive in format '%#H:%M'

I've seen a lot of similar questions, and still I don't seem to be able find out what the issue with my code is. I'm running this:

from datetime import datetime
date_st = "17:00"
date = datetime.strptime(date_st, "%#H:%M")

And I get the error:

ValueError: '#' is a bad directive in format '%#H:%M'

I'm running Windows, that's why I use %#H and not %-H. I tried %-H though and it doesn't work as well.

Upvotes: 2

Views: 532

Answers (1)

Artyer
Artyer

Reputation: 40891

%#H is only a valid formatting code for formatting a string (strftime), not parsing it with strptime.

I think strptime is provided by Python itself because windows doesn't have such a function, so theoretically support for #H/-H can be added. But since %H can already parse a single optional leading 0 for one-digit hours, there isn't much need for it (and POSIX strptime doesn't allow %-H).

You will have to do something else to parse it. In this case, something like:

date_no_leading_zeros = date_st.lstrip("0")
# To support strings like "00:17" for 17 minutes past midnight
if date_no_leading_zeros.startswith(":"):
    date_no_leading_zeros = "0" + date_no_leading_zeros
date = datetime.strptime(date_no_leading_zeros, "%H:%M")

would work. But in other cases, you might want to use a regex to parse the date.

Upvotes: 1

Related Questions