Проблема с отображением правильного типа даты HBase в Apache Phoenix - PullRequest
0 голосов
/ 17 декабря 2018

У меня возникла проблема при чтении данных формата даты, созданных с помощью hbase api (с помощью команды 'put') из apache phoenix.

Это формат даты, который я ожидал: Дата: 2018-12-17T21:21: 45 + 07: 00 в 'гггг-ММ-дд' => '2018-12-17'

Таблица создана из клиента Phoenix с использованием ниже DDL:

CREATE TABLE "TEST"
(
 ID VARCHAR,
 "col1".TRX_DATES UNSIGNED_DATE 
 CONSTRAINT PKD PRIMARY KEY (ID)
)

Но когда я пытаюсь запросить данные, отображается неверный формат даты:

292269006-11-18

Я попытался провести некоторые исследования и эксперименты, используяРазличные типы данных для вставки даты в hbase, включают использование длинного значения (миллисекунды) даты.Но, тем не менее, он не может показать правильное значение даты в Фениксе ('yyyy-MM-dd')

Какие-либо предложения для этого случая?

1 Ответ

0 голосов
/ 17 декабря 2018

Возможно, это должен был быть комментарий, потому что я не могу объяснить все детали того, что пошло не так, или как вы можете это исправить.Но я вижу, что ваша проблема связана с инверсией знакового бита миллисекунд с той эпохи.Я попробовал это:

    long milli = OffsetDateTime.parse("2018-12-17T21:21:45+07:00").toInstant().toEpochMilli();
    milli += Long.MIN_VALUE; // Flip the sign bit
    Date wrongDateAsOldfashiondDate = new Date(milli);
    System.out.println(wrongDateAsOldfashiondDate);
    System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(wrongDateAsOldfashiondDate));

Вывод на моем компьютере (в часовом поясе Европы / Копенгагена) был:

Fri Nov 18 08:08:49 CET 292269006
292269006-11-18

Обычно не следует использоватьстарый и плохо спроектированный класс Date, но так я мог получить точно такой же результат, как и у вас.Отличие от современного API даты и времени состоит в том, что Date использует юлианский календарь, поэтому, очевидно, это также использовалось программным обеспечением, дающим неожиданный результат (вероятно, класс Date также был задействован).

...