【问题标题】:How to transform a Solr date back to a python-readable date e.g. 'datetime' and vice versa?如何将 Solr 日期转换回 python 可读的日期,例如'日期时间',反之亦然?
【发布时间】:2021-02-22 16:35:35
【问题描述】:

是否有一种简单/有效的方法可以将“当前 Solr 日期”转换为如下所示的“所需输出”?我想过使用正则表达式或字符串方法来清理 Solr 日期,但如果在 Python 中使用一种方法可以将这些日期从 Solr 转换,那就太好了。

当前 Solr日期:

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

所需输出(datetime 模块格式):


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

【问题讨论】:

  • 因为你不想在你的输出中指定任何 UTC 偏移量,你可以去掉 Z,解析 to datetime 并调用 datetime.isoformat(' ') 我猜
  • 您是否知道如何将所需的输出转换回 solr 格式? (是我的“viceversa”问题的一部分)。谢谢:)
  • 在您的示例中,您忽略了毫秒 - 对吗?
  • 毫秒可以忽略,是的(除非 solr 对此提出了问题)
  • 好的,我在回答中使用了.replace(microsecond=0);您可以随时删除它以保留它们。但请注意,Python 将显示 微秒(6 位数字)。将它们剥离到 毫秒 是另一个弯路;-)

标签: python datetime solr pysolr


【解决方案1】:

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

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

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,例如毫秒。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 2013-01-10
    • 2019-07-23
    • 2011-07-24
    • 2017-04-15
    相关资源
    最近更新 更多