Python Datetime Strptime错误:' - '是格式为'%-m - % - d-%y%-H:%M:%S'的错误指令

sle*_*ner 8 python datetime

我知道有类似的问题,但它们似乎与datetime处理(或不处理)时区的方式有关.

设置有点复杂,可能与问题无关,但我认为按原样包含代码很重要,所以有一点背景:

我有一个数组字典.这些阵列中的每一个代表同一个人的"尝试",但是在不同时间发生.最终,我将会寻找最早的这些日期.这可能是一个迂回的解决方案,但我将所有日期转换为datetime对象,找到最早的,然后只使用该索引来取出第一次尝试:

以下是设置尝试日期时间数组的代码:

for key in duplicates_set.keys():
    attempt_dates = [datetime.strptime(attempt['Attempt Date'], "%-m-%-d-%y %-H:%M:%S") for attempt in duplicates_set[key]]
Run Code Online (Sandbox Code Playgroud)

这是原始日期字符串之一的格式:

12-5-2016 3:27:58 PM

我得到的回报是:

ValueError: '-' is a bad directive in format '%-m-%d-%y %-H:%M:%S'
Run Code Online (Sandbox Code Playgroud)

我假设这是指在'm','d'和'H'之前放置的破折号,因为它们是非零填充的小数.为什么告诉我这个?

Cha*_*ffy 10

%-* - 跳过填充 - 是一个GNU libc扩展.它不是POSIX strftime的一部分,因此无法保证可以移植到时间格式化调用最终不受GNU的strftimeC库函数支持的系统.

Python datetime模块文档显式指定了它支持的格式字符串,但未给出此扩展名.因此,虽然在GNU date和GNU中支持strftime()它,但它在Python中不可用datetime.

  • 好的,但是我有一个没有 0 填充的时间格式,这个答案看起来并没有提供如何使用 strptime 在 python 中读取此格式的解决方案 (11认同)
  • @Veggiet,您不需要_需要_在解析端跳过填充的指令;它只在生成端需要。`datetime.datetime.strptime('2-1-2020 3:14:5', '%m-%d-%Y %H:%M:%S')` 工作正常。 (2认同)

Dav*_*des 6

我遇到过同样的问题; 日期:21年1月9日

根据: https: //strftime.org/正确的格式是“%-d/%-m/%y”,这会给出错误的指令错误。“%d-/%m-/%y”也不起作用。

奇怪的是,有效的是“%d/%m/%y”。

  • %d 和 %-d 是不同的格式。%-d 跳过尾随零 (2认同)