【问题标题】:Why does Python strptime skip missing 0s in a string when using %Y%m%d? [duplicate]为什么 Python strptime 在使用 %Y%m%d 时会跳过字符串中缺少的 0? [复制]
【发布时间】:2021-04-23 21:06:02
【问题描述】:

我正在尝试使用datetime.datetime.strptime 来确保字符串的格式为%Y%m%d-%H%M%S。但是,strptime 不考虑 %Y 或任何其他指令中的 0 填充格式。例如,在下面的代码中,只有最后一行会引发错误。但是,我希望只有第一个 strptime 调用起作用。

from datetime import datetime

datetime.strptime('20101124-134523', '%Y%m%d-%H%M%S')

datetime.strptime(  '101124-134523', '%Y%m%d-%H%M%S')
datetime.strptime('20101124-34523', '%Y%m%d-%H%M%S')
datetime.strptime('20101124-3453', '%Y%m%d-%H%M%S')
datetime.strptime('20101124-343', '%Y%m%d-%H%M%S')

datetime.strptime(   '01124-134523', '%Y%m%d-%H%M%S')

这是预期的行为吗?有没有办法让strptime 在其中一个指令中的字符串缺少初始 0 时引发错误?

【问题讨论】:

  • 你能解释一下为什么你期望其他人工作吗?您是否检查过它们被解析为什么?您对“缺少初始 0”的标准是什么?请注意,根据文档:“与 strptime() 方法一起使用时,前导零对于格式 %d、%m、%H、%I、%M、%S、%J、%U、%W 是可选的, 和 %V。”。
  • @MisterMiyagi 如果我使用 %Y%m%d 我希望像 '101124' 这样的字符串会引发错误,因为缺少第一个 '0'。相反,strptime 在给出的示例代码中为第二次调用返回 datetime.datetime(1011, 2, 4, 13, 45, 23)。
  • 我不明白这是一个不同的问题。从另一个问题“[strptime] 没有像我预期的那样抛出 ValueError 异常。有没有办法强制 strptime 验证它是零填充的?”。
  • @MisterMiyagi 你是对的。在这个问题中,小时没有填充。问题是2017年的。如果这3年没有什么新的东西我会删除问题并编写自己的函数。

标签: python python-3.x datetime parsing strptime


【解决方案1】:

strptime 是一种相对简单的解析日期和时间的方法。我认为不可能让它以与您的示例一致的方式解析您的示例。

但是,您可能会发现一些更强大的库至少能够解析您提供的一些示例。我建议你看看:dateparserdateutil

【讨论】:

  • 感谢您的建议,但这是一项非常简单的任务。我将编写自己的函数。我只是认为strptime可以做到。
  • 确实看起来没那么复杂。祝你好运!
猜你喜欢
  • 2010-12-22
  • 2021-03-09
  • 1970-01-01
  • 1970-01-01
  • 2018-04-23
  • 2020-05-09
  • 2011-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多