Несоответствие между значением даты janusgraph и результатом запроса gremlin
У меня есть данные графика со значениями типа даты. Мой запрос gremlin для свойства типа даты работает, но выходное значение не является значением даты.
Среда:
- Янусграф 0.3.1
- gremlinpython 3.4.3
Ниже мой пример:
- Данные (JanusGraph):
{"ID": "doc_1", "MY_DATE": [Tue Jan 10 00:00:00 KST 1079]}
- Запрос:
g.V().has("ID", "doc_1").valueMap("MY_DATE")
- Выход (gremlinpython):
datetime(1079, 1, 16)
Ошибка 6 дней (1079.1.10 -> 1079.1.16). Это несоответствие не возникает, когда годы превышают 1600. Есть ли у временной метки проблемы с сериализацией / десериализацией между janusgraph и gremlinpython?
Спасибо
2 ответа
Были некоторые проблемы с Python и датами, но я бы исправил их для 3.4.3, то есть версии, которую вы указали, что используете. Проблема описана здесь, в TINKERPOP-2264 вместе с исправлением, но в основном были некоторые проблемы с часовыми поясами. Из данных вашего примера похоже, что вы сохраняете дату с часовым поясом (например, KST). Я не совсем уверен, но я предполагаю, что все будет работать так, как ожидалось, если дата будет сохранена в формате UTC.
После некоторых попыток и поиска я обнаружил, что есть некоторая разница между java Date и python datetime. (Юлианский и григорианский календарь) Итак, я заменил SimpleDateFormat на JodaTime и получил ожидаемый результат, как показано ниже:
- Данные (сырые): {"ID": "doc_1", "MY_DATE": "1079-1-29"}
- Данные (JanusGraph): {"ID": "doc_1", "MY_DATE": [среда, 23 января, 00:32:08 KST 1079]}
- (Я думаю, что JanusGraph использует объект Java Date внутри..)
- Запрос: gV(). Has("ID", "doc_1"). ValueMap("MY_DATE")
- Вывод (gremlinpython): datetime(1079, 1, 29)
Спасибо