即时 toString 预置加
我们的数据存储中有具有有效和到期时间的记录。此信息使用 的字符串表示形式存储。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
我可以选择在数据存储中保留之前截断。我更感兴趣的是为什么会发生这种情况,以及我们如何明确地避免它?+