【发布时间】:2017-04-17 22:16:29
【问题描述】:
调用 JDK Instant.toEpochMilli() 可能会导致算术上溢/下溢(例如Instant.MAX.toEpochMilli() 或Instant.MIN.toEpochMilli())。我正在寻找一种简单的方法来避免算术溢出并简单地使用Long.MAX_VALUE。这是我当前的代码。
long seconds, millis;
seconds = deadline.getEpochSecond();
if (seconds > Long.MAX_VALUE / 1000 - 1)
millis = Long.MAX_VALUE;
else if (seconds < Long.MIN_VALUE / 1000 + 1)
millis = Long.MIN_VALUE;
else
millis = deadline.toEpochMilli();
似乎必须有一种更清晰/更清晰的方式来实现这一点。你将如何实现这个逻辑?
我必须担心上溢/下溢,因为Instant.MAX 和Instant.MIN 被传递给此代码所在的方法。
【问题讨论】:
标签: java time arithmetic-overflow