奇怪的是,“#”是格式为“%#H:%M”的错误指令

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

我已经看到很多类似的问题,但我似乎仍然无法找出我的代码有什么问题。 我是 运行 这个:

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

我得到错误:

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

我是 运行 Windows,这就是我使用 %#H 而不是 %-H 的原因。虽然我尝试了 %-H 但效果不佳。

%#H只是格式化字符串(strftime)的有效格式化代码,而不是用strptime.

解析它

我觉得strptime是Python自己提供的,因为windows没有这个功能,所以理论上支持#H/-H可以添加。但是由于 %H 已经可以在 one-digit 小时内解析单个可选的前导 0,因此没有太多需要它(并且 POSIX strptime 不允许 %-H).

您必须执行其他操作才能解析它。在这种情况下,类似于:

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")

会起作用。但在其他情况下,您可能希望使用正则表达式来解析日期。