【问题标题】:Weirdly enough, '#' is a bad directive in format '%#H:%M'奇怪的是,'#' 是格式为 '%#H:%M' 的错误指令
【发布时间】:2022-01-27 17:19:28
【问题描述】:

我见过很多类似的问题,但我似乎仍然无法找出我的代码的问题所在。 我正在运行这个:

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 但效果不佳。

【问题讨论】:

  • 你为什么觉得这很奇怪? Python 文档是否说明它应该可以工作?
  • @It_is_Chris 很好,所以没有办法删除日期时间功能中的尾随零?
  • 根据您的示例代码,您的预期输出是什么,即print(date) 应该返回什么?
  • @It_is_Chris 0001-01-01 17:00:00。我也希望它适用于非零填充字符串,例如“2:00”

标签: python datetime format strptime strftime


【解决方案1】:

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

我认为strptime是Python自己提供的,因为windows没有这样的功能,所以理论上可以增加对#H/-H的支持。但由于 %H 已经可以解析一个可选的前导 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")

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

【讨论】:

  • 你也可以用 zfill 来做这个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
  • 2020-01-31
相关资源
最近更新 更多