在 Neptune 等基于 Gremlin 的数据库中存储 date/timestamp 的正确方法是什么?

What is the correct way to store date/timestamp in Gremlin based database like Neptune?

在 Amazon Neptune 等基于 gremlin 的数据库中存储 date/time 邮票的正确方法是什么?

当我在 python

中尝试以下操作时
current_timestamp = datetime.datetime.now()
g.E('d').property('otp_verified_on', current_timestamp).next()

它给我输出,类似于

'otp_verified_on': datetime.datetime(2021, 11, 23, 9, 47, 30, 173000)

所以我输入 cast to string

current_timestamp = datetime.datetime.now()
g.E('d').property('otp_verified_on', str(current_timestamp)).next()

得到如下结果

'otp_verified_on': '2021-11-23 08:27:45.867543'

我的查询基于日期比较操作 gte、lte` 等...

better/correct实现方式是什么?

Neptune 会将 Python 日期转换为适当的内部形式,您可以直接对日期进行评估。这是一组示例。您不需要(也不应该)强制转换为字符串。另一种方法是存储纪元偏移整数,但在 Neptune 的情况下,使用原生 Python 日期在计算执行方式方面会稍微更有效。您应该检查您可能使用的每个数据库的文档,但对于 Neptune,使用本机 Python datetime 是最好的方法。

>>> import datetime

>>> g.addV('test').property('ts',datetime.datetime.now()).next()
v[eebec326-001f-577b-0893-bbd0ddf5e271]

>>> g.addV('test').property('ts',datetime.datetime.now()).next()
v[3ebec326-0628-8b3a-5d4e-9d7292075072]

>>> g.V().hasLabel('test').valueMap(True).toList()
[{<T.id: 1>: 'eebec326-001f-577b-0893-bbd0ddf5e271', <T.label: 4>: 'test', 'ts': [datetime.datetime(2021, 12, 4, 10, 34, 27, 448000)]}, 
{<T.id: 1>: '3ebec326-0628-8b3a-5d4e-9d7292075072', <T.label: 4>: 'test', 'ts': [datetime.datetime(2021, 12, 4, 10, 34, 30, 589000)]}]

>>> g.V().hasLabel('test').has('ts',lt(datetime.datetime.now())).toList()
[v[eebec326-001f-577b-0893-bbd0ddf5e271], v[3ebec326-0628-8b3a-5d4e-9d7292075072]]

>>> g.V().hasLabel('test').has('ts',gt(datetime.datetime.now())).toList()
[]