为什么ZoneOffset.ofTotalSeconds(int totalSeconds)仅在totalSeconds是四分之一小时的倍数时才将缓存用于ZoneOffset?

if (totalSeconds % (15 * SECONDS_PER_MINUTE) == 0) {
            Integer totalSecs = totalSeconds;
            ZoneOffset result = SECONDS_CACHE.get(totalSecs);
            if (result == null) {
            (...)

最佳答案

例如,到目前为止,目前使用的最大区域偏移量是四分之一小时

Europe/Ljubljana     +02:00
America/Boa_Vista    -04:00
Asia/Brunei          +08:00
Pacific/Wake         +12:00
Asia/Colombo         +05:30
Asia/Kathmandu       +05:45


由于经常使用此类,因此值得对其进行缓存。如果在您的程序中使用,则不太可能再次在您的程序或在同一JVM中运行的其他程序中再次使用它们。历史上已经使用过其他偏移量,甚至从未使用过其他偏移量,因此不值得缓存。即使您只使用过一次,他们也认为您再次使用相同的可能性很低,以至于在JVM关闭之前,它们都不希望对其进行缓存(可能从现在开始要花费几周甚至几个月的时间)。

我并没有声称自己是心智的读者,但是我给出的解释对我自己是有道理的,我认为,即使不是100%正确,它也能抓住做出决定背后最重要的思想。事情稍微复杂些。例如,没有使用很多不能被整小时整除的偏移量,而是选择了一种简单的条件。

07-25 23:54