GTLC全球技术领导力峰会·上海站,首批讲师正式上线! 了解详情
写点什么

聊聊 Joda-Time 2.4 的新增方法及在并发和性能上的改进

2014 年 8 月 26 日

Joda-Time 2.4 的日期和时间 Java 包已经发布。这是 Joda-Time 在 2014 年的首个发布版本,它包含了功能的增强、bug 修复,以及一个在时区方面的更新。本次发布没有引入新的 deprecation,Joda-Time 2.4 基于 Apache License Version 2 发布,对 JDK 的版本要求在 1.5 以上。

以下是 Joda-Time 2.4 的一些功能方面的增强。

  • 接口中添加了 Duration.multipliedBy(long multiplicand)、Duration.dividedBy(long divisor) 和 Duration.negated() 几个 public 方法。
  • 在 LocalDate.hashCode() 中,去掉了 (支持缓存的)hashCode (int iHash) 方法前并不必要的 volatile 修饰符。该 (支持缓存的)hashCode 方法现在遵从了独特的单重检查模式(racy single-check idiom,一种单重检查模式的变体,出自 _Effective Java_)。
  • DateTimeParserBucket 内部实现现在已改为使用 CharSequence,但是并没有对 public API 造成任何影响。这允许 DateTimeParserBucket 可以在单个线程中被重新使用,从而减少了短命对象的创建。CharSequence 同样也被应用在解析方面,但是只能通过创建一个可变的 DateTimeParserBucket 才能访问对应的解析方法。DateTimeParserBucket 是一个较底层的概念,通常被用于较高级的使用场景。可以通过查看 issue #111 来了解更多信息。
  • DateTimeFormat、DateTimeFormatter 和 DateTimePrinter 添加了对 java.lang.Appendable 的支持。内部实现采用了 StringBuilder 来替代 StringBuffer。
  • 对 joda.time.chrono 包内的类的年表查找的性能进行了改进。目前采用了 ConcurrentHashMap 来替代原来的同步 Map。而 GJChronologies 的缓存查找也同样得到了简化。
  • 通过使用 AtomicReferenceArray 改进了 DateTimeFormat 的模式缓存查找的性能。
  • 简化并提升了 GJLocaleSymbols 符号查找的性能。
  • DateTimeZone 数据更新到了版本 2014e。

以下是在 Joda-Time 2.4 中已经修复的 bug。

  • 修复了 DateTimeField.getDurationField() 和 DateTimeField.getRangeDurationField() 中对世纪和纪元的错误处理。
  • 修复了 DateTimeZone.getOffsetFromLocal(),从而可以正确地处理 DST(Daylight Saving Time,即夏时制)历史中的最近一次转换。这是一个从 Local 向 UTC 的转换问题。
  • 在 Period 的创建过程中。如果一个时间端点位于 DST 的覆盖范围之中,而另一个时间端点超出了 DST 的覆盖范围,那么这个 Period 将会出错。该版本修复了对该种情况的计算,而额外的小时数将不再被添加。
  • DateTimeUtils.isContiguous(ReadablePartial) 方法将在对非法输入进行求值时将会抛出 NullPointerException 异常。
  • 当 PeriodType 缺失了年份或月份时,Period.normalizedStandard(PeriodType) 方法将抛出 UnsupportedOperationException 异常。
  • 在方法 Partial.with(DateTimeFieldType,int) 实现中添加了对参数缺失的校验,以避免创建无效的 Partial。
  • 向 MutableDateTime 添加零不会再对秋季中 DST 覆盖范围的偏移值进行修改。
  • 在 DateTime/MutableDateTime 的入参为 milliseconds 的构造器中增加了校验逻辑。在该版本中,new DateTime(Long.MAX_VALUE) 这种方式不再合法,将会被拒绝。
  • 月份中的日(Day-of-month)和年份中的日(day-of-year)等字段类(DateTimeField 的子类)的 isLeap() 方法将返回正确的结果。
  • 当创建 Partial 来进行比较时,强调了 year > weekyear。
  • 对具有 null ID 的非法 TimeZone 实现进行了处理。当传入含有一个 null ID 的 TimeZone 来调用 DateTimeZone.forTimeZone() 时会抛出 NullPointerException 异常。
  • 一些 Android 的实现会在对不同类型的变量进行比较时抛出 ClassCastException 异常。本次修复针对有问题的 Android 实现的处理进行了改善。
  • 在 DateTimeFormatterBuilder 中的解析实现采用了 ConcurrentHashMap,从而获得了更高的并发性能。
  • DateTimeZone 曾错误地调用了 ThreadGroup.uncaughtException(),目前已经被修改为抛出一个 RuntimeException 作为替代。

查看英文原文: Joda-Time 2.4 - New Methods, Improved Concurrency and Performance

2014 年 8 月 26 日 00:133535
用户头像

发布了 52 篇内容, 共 20.1 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

往日之歌

彭宏豪95

一个前端工程师与死神的较量

陈辰

前端工程 压力 医院 生活质量 工程师

市场调研分析师走向末法时代

人称T客

Enhanced Github:一个 GitHub 专用的好插件

非著名程序员

GitHub 程序员 效率工具

Java 25周年:MovedByJava之观点

范学雷

Java 架构 编程语言

金蝶2019财报在此——比头条更精彩

人称T客

Redis 命令执行过程(下)

程序员历小冰

redis 源码分析

一个产品最不重要的东西

Neco.W

产品 外包 产品经理

用友2019财报:你们看到的是数字,我却看到了office

人称T客

深入剖析ThreadLocal原理

JFound

Java

Elastic Stack 系列专辑

Yezhiwei

elasticsearch Logstash Kibana ELK Elastic Stack

BPM产业数字观察:中国市场趋向成熟,蛰伏的BPM即将醒来

人称T客

Django的ListView超详细用法(含分页paginate功能)

BigYoung

Python django ListView 分页

为什么要云原生?

Aaron_涛

架构 云原生

SaaS生态比拼,谁会是这场PK中的主角?

人称T客

游戏夜读 | 写游戏用什么语言?

game1night

教你快速升职加薪(毒鸡汤,慎服……)

无箭的丘比特

团队管理 企业文化 个人成长 团队建设

SpringBoot瘦身

JFound

Spring Boot sprnig

竟然有人想看我的「日记」,满足一下大家

非著名程序员

学习 程序人生 提升认知

Spring Security 如何将用户数据存入数据库?

江南一点雨

Java spring Spring Cloud Spring Boot spring security

3亿办公族合力,第三代SaaS抵达战场

人称T客

python实现·十大排序算法之冒泡排序(Bubble Sort)

南风以南

Python 排序算法 冒泡排序

我的编程之路-4(进阶)

顿晓

进阶 看书 编程之路

Spring Security+Spring Data Jpa 强强联手,安全管理只有更简单!

江南一点雨

Java spring Spring Boot spring security

分布式系统选主怎么玩

奈学教育

分布式系统

kotlin 200行代码开发一个简化版Guice

陈吉米

Java kotlin guice ioc mynlp

Java开发架构篇:DDD模型领域层决策规则树服务设计

小傅哥

领域驱动设计 DDD 小傅哥 重构

程序员的修行之路-人生是一场修行

牧马人

程序员人生

万字长文带你看懂Mybatis缓存机制

程序员小岑

Java 源码 技术 mybatis

职场“潜”规则

俊毅

个人成长 职场 新人 人才培养 能力模型

回“疫”录(22):我以为结束了,其实才开始

小天同学

疫情 回忆录 现实纪录 纪实

DNSPod与开源应用专场

DNSPod与开源应用专场

聊聊Joda-Time 2.4的新增方法及在并发和性能上的改进-InfoQ