因此,如果您不告诉Python如何输出时间,它将执行以下操作:
print(datetime.datetime.utcnow())
>> 2019-06-07 13:07:55.777035
要将时间字符串读入datetime对象,通常使用.strptime()
方法并告诉它要查找的内容。
我知道有dateutil
之类的库,它们不是可以解释日期字符串的标准Python内置库的一部分。假设此特定字符串是由标准Python创建的,而没有指定任何相关信息,那么没有非内置库的Python是否可以将其返回到datetime.datetime
对象中,而无需告知strptime()
寻找吗?
答案 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()
的逆运算。