如何将 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,例如毫秒。
是否有一种 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,例如毫秒。