java - 带缓存的 ZoneOffset 计算
问题描述
为什么仅当 totalSeconds 是一刻钟的倍数时才对ZoneOffsetZoneOffset.ofTotalSeconds(int totalSeconds)
使用缓存?
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% 正确,它就会抓住做出决定背后的最重要的想法。事情稍微复杂一些。例如,没有多少不能被整小时整除的偏移量正在使用中,但他们选择了一个简单的条件。
推荐阅读
- android - 设置代马家 SliderLayout 的自定义形状
- android - 如何检查一个元素是否在android espresso中另一个元素的右侧?
- java - 类和字段级别的@JsonView 注解和Object Mapper
- youtube - 首次使用 youtube-dl 下载后,我无法访问 youtube
- sql - 我需要创建一个新列或从数组更改原始列
映射 其中 int 值在相应字符串的新表中 - awk - 需要使用 mawk 删除重复的行(特别是)
- javascript - 如何按日期过滤列表角度6
- visual-studio-code - 如何在 package.json 的 VS Code 属性描述中包含命令链接?
- java - 在具有当前系统日期的单独目录中为每个日期创建日志文件
- python-3.x - 如何解决附件数量在 while 循环中增加的问题