当前位置: 首页 > 知识库问答 >
问题:

Python不一致的日期时间解析

海新霁
2023-03-14

我正在尝试读取特定格式的日期字符串。

首先,让我们以所需格式生成当前时间的字符串。

In : format_string = "%Y-%m-%dT%H:%M:%S.%f+%z"
In : now = datetime.now().strftime(format_string)
In : print(now)
Out: '2020-07-19T19:12:09.453475+'

现在,让我们尝试将其转换回datetime对象


In : datetime.strptime(now, format_string)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-15-32937025edd1> in <module>
----> 1 datetime.strptime("2020-07-19T19:12:09.453475+", "%Y-%m-%dT%H:%M:%S.%f+%z")

/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/_strptime.py in _strptime_datetime(cls, data_string, format)
    575     """Return a class cls instance based on the input string and the
    576     format string."""
--> 577     tt, fraction, gmtoff_fraction = _strptime(data_string, format)
    578     tzname, gmtoff = tt[-2:]
    579     args = tt[:6] + (fraction,)

/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/_strptime.py in _strptime(data_string, format)
    357     if not found:
    358         raise ValueError("time data %r does not match format %r" %
--> 359                          (data_string, format))
    360     if len(data_string) != found.end():
    361         raise ValueError("unconverted data remains: %s" %

ValueError: time data '2020-07-19T19:12:09.453475+' does not match format '%Y-%m-%dT%H:%M:%S.%f+%z'

错误与格式有关,格式完全相同。

这是怎么回事?

共有2个答案

能钟展
2023-03-14

为了深入了解bigbounty的答案,Python在datetime%z[源代码]方面存在一些问题

Python的datetime不支持军用时区后缀,如UTC的Z后缀。以下简单的字符串替换可以做到这一点:

Python datetime对象默认没有时区信息

一个选项是从模式中删除%z,但是您可能希望利用链接答案中的一个选项来包括时区信息,以符合ISO 8601,例如使用箭头

> str(arrow.utcnow())
'2014-05-17T01:18:47.944126+00:00'
邓令
2023-03-14

获取datetime对象后,last%z不存在。因此,在将字符串转换回datetime对象时,您必须删除它

In [29]: format_string = "%Y-%m-%dT%H:%M:%S.%f+%z"

In [30]: now = datetime.now().strftime(format_string)

In [31]: now
Out[31]: '2020-07-20T00:29:48.228980+'

In [32]: format_string = "%Y-%m-%dT%H:%M:%S.%f+"

In [33]: datetime.strptime(now, format_string)
Out[33]: datetime.datetime(2020, 7, 20, 0, 29, 48, 228980)
 类似资料:
  • 问题内容: 我有一个系统(用Python开发),它接受 datetime作为各种格式的字符串 ,我必须 解析 它们。当前datetime字符串格式是: 现在我想要一个可以在适当的datetime对象中转换任何这些datetime格式的 通用解析器… 否则,我必须单独分析它们。因此,还请提供单独解析它们的方法(如果没有通用解析器)。 问题答案: 正如@TimPietzcker所建议的那样,dateu

  • 问题内容: 我真的很head头。我使用s已有一段时间了,但现在,使用SimpleDateFormat解析日期(只是有时)是完全错误的。 特别: 打印字符串。有没有搞错?-它甚至都不会一直解析为错误的日期! 更新: 修复得很漂亮。您不知道吗,在其他一些地方也滥用了它。一定喜欢调试别人的代码:) 问题答案: 我认为您要使用格式,而不是’hh’,以便您使用00-23之间的小时数。“ hh”采用12小时增

  • 问题内容: 我有一个包含datetime列的表。我希望无论何时都返回给定日期的所有记录。换句话说,如果我的表仅包含以下4条记录,那么如果我限制为2012-12-25,则仅返回第二和第三条记录。 问题答案: 永远不要 使用像这样的选择器-它是性能杀手: 它将为所有不匹配的行(包括那些行)计算 它将无法使用索引进行查询 使用起来更快 因为这将允许索引使用而无需计算。 编辑 正如Used_By_Alre

  • 问题内容: 我接收到来自Twitter的特定日期以特定格式发送的Twitter消息: 我想将这些日期存储在带有djangos DateTimeField字段的postgresql中的“带有时区的时间戳”字段中。但是,当我存储该字符串时,出现此错误: 我可以自动将twitter datetype转换为python datetime时间(在我的应用程序中的其他地方可以保存日期)。 问题答案: 编写这样

  • 问题内容: 我想使用JSON从Python发送序列化形式的datetime.datetime对象,并使用JSON在JavaScript中反序列化。做这个的最好方式是什么? 问题答案: 你可以在中添加参数来处理此问题: 这是格式。 更全面的默认处理程序功能:

  • 问题内容: 我有一个脚本,需要在脚本的不同行执行以下命令: 在我的陈述中,我有以下内容: 我收到以下错误: 如果我将语句的顺序更改为: 我收到以下错误: 如果我再次将语句更改为: 我收到以下错误: 这是怎么回事,我怎么都可以工作? 问题答案: 您的麻烦是,您有一些代码希望对 模块 进行引用,而其他代码希望对类进行引用 。 显然,不能两者兼有。 当您这样做时: 您首先要设置为对该类的引用,然后立即将