У нас есть записи в нашем хранилище данных, которые имеют эффективный и срок действия. Эта информация хранится с использованием строкового представления Instant.
Есть записи, которые никогда не истекают. Но поскольку значение даты истечения срока действия является обязательным, мы решили сохранить строковое представление Instant.MAX.
Пока все хорошо. Мы используем прецедент для поиска всех записей, которые активны во временном диапазоне ввода [s,e]. Мы запрашиваем хранилище данных и возвращаем все такие записи [Si, Ei], которые удовлетворяют условию Si < s && e < Ei Обратите внимание, что здесь сравниваются представления строк.
Теперь проблема заключается в том, что + добавляется к строковому представлению Instant.MAX. Это не соответствует условию e < Ei, так как ASCII('+') < ASCII(digit).
Я написал фрагмент кода, который нужно знать, после чего second, начало + начинается:
Long e = Instant.now().getEpochSecond()*1000;
for (int i = 0; i < 5; i++) {
System.out.println(e + "->" + Instant.ofEpochMilli(e));
e *= 10;
}
который печатает:
1471925168000->2016-08-23T04:06:08Z
14719251680000->2436-06-07T17:01:20Z
147192516800000->6634-05-07T02:13:20Z
1471925168000000->+48613-06-14T22:13:20Z
14719251680000000->+468404-07-08T06:13:20Z
У меня есть возможность обрезать + перед сохранением в хранилище данных. Меня больше интересует, почему это происходит и как мы можем избежать этого?