不使用strptime将字符串转换为datetime对象

时间:2019-06-07 13:16:10

标签: python python-3.x datetime

因此,如果您不告诉Python如何输出时间,它将执行以下操作:

print(datetime.datetime.utcnow())
>> 2019-06-07 13:07:55.777035

要将时间字符串读入datetime对象,通常使用.strptime()方法并告诉它要查找的内容。

我知道有dateutil之类的库,它们不是可以解释日期字符串的标准Python内置库的一部分。假设此特定字符串是由标准Python创建的,而没有指定任何相关信息,那么没有非内置库的Python是否可以将其返回到datetime.datetime对象中,而无需告知strptime()寻找吗?

2 个答案:

答案 0 :(得分:2)

简短的回答:不。尽管datetime以这种一致的格式输出,但是该模块似乎没有一种简单的方法来读回相同的格式(例如,格式字符串常量)。此外,strptime()的format参数没有默认值,因此我们必须指定一个。但是,这样做非常简单:

x = str(datetime.datetime.utcnow())
dt = datetime.datetime.strptime(x, "%Y-%m-%d %H:%M:%S:%f")

,您可以轻松地将该格式字符串转换为在整个程序中使用的常量(并且可以对此进行硬编码-此格式是标准格式,不会更改):

utc_format = "%Y-%m-%d %H:%M:%S:%f"
...
dt = datetime.datetime.strptime(x, utc_format)

从理论上讲,您还可以使用字符串切片或正则表达式来显式提取年,月,日等,但是随后您仍然必须从所有这些中手动构造一个datetime对象,没有充分的理由去通过日期时间存在的麻烦。我认为标准库中没有其他方法可以做得更好。

答案 1 :(得分:2)

对于使用Python 3.7或更高版本的任何人,datetime.fromisoformat()将解析内置方法发出的ISO 8601格式之一的日期时间字符串(包括问题中的日期时间字符串)。从文档中:

  

以一种格式返回与 date_string 对应的datetime   由date.isoformat()datetime.isoformat()发出。   具体来说,此函数支持格式为字符串的字符串   YYYY-MM-DD[*HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]],其中   *可以匹配任何单个字符。

     

警告::这不支持解析任意ISO 8601字符串-它   只能用作datetime.isoformat()的逆运算。