如何将 Solr 日期转换回 python 可读日期,例如'datetime' 反之亦然?

How to transform a Solr date back to a python-readable date e.g. 'datetime' and vice versa?

是否有一种 easy/efficient 方法可以将 'Current Solr date' 转换为如下所示的 'Desired output'?我考虑过使用正则表达式或字符串方法来清理 Solr 日期,但如果 Python 中有一种方法可以从 Solr 转换这些日期,那就太好了。

当前 Solr 日期:

'2020-01-21T12:23:54.625Z'

期望的输出datetime模块格式):


'2020-01-21 12:23:54' 

这是从字符串到日期时间对象再到字符串的快速往返,包括几个选项。希望这能让你继续前进。

字符串 → 日期时间(保留微秒)

from datetime import datetime

s = '2020-01-21T12:23:54.625Z'

# to datetime object, including the Z (UTC):
dt_aware = datetime.fromisoformat(s.replace('Z', '+00:00'))
print(repr(dt_aware))
# datetime.datetime(2020, 1, 21, 12, 23, 54, 625000, tzinfo=datetime.timezone.utc)

# to datetime object, ignoring Z:
dt_naive = datetime.fromisoformat(s.strip('Z'))
print(repr(dt_naive))
# datetime.datetime(2020, 1, 21, 12, 23, 54, 625000)

日期时间 → 字符串(去除微秒)

# to isoformat string, space sep, no UTC offset, no microseconds
print(dt_aware.replace(microsecond=0, tzinfo=None).isoformat(' '))
# 2020-01-21 12:23:54
print(dt_naive.replace(microsecond=0).isoformat(' '))
# 2020-01-21 12:23:54

# ...or with a Z to specify UTC and a T as date/time separator
print(dt_aware.replace(microsecond=0).isoformat().replace('+00:00', 'Z'))
# 2020-01-21T12:23:54Z

# to isoformat string, with Z for UTC, naive / no tzinfo:
print(dt_naive.replace(microsecond=0).isoformat() + 'Z') # just add Z as a suffix
# 2020-01-21T12:23:54Z

如果您需要特定的精度,您可能还想看看 datetime.isoformat 的 timespec kwarg,例如毫秒。