一尘不染

使用Java日期和时间类,还是应该使用Joda Time这样的第三方库?

java

我正在创建一个基于Web的系统,该系统将在世界各地的国家中使用。日期和时间是一种必须存储的数据。

与第3方库(如Joda time)相比,使用Java日期和时间类的优缺点是什么?我猜这些第三方库的存在是有充分理由的,但是我自己从来没有真正比较过它们。


阅读 605

收藏
2020-03-17

共1个答案

一尘不染

编辑:现在已经发布了Java 8,如果可以使用,请这样做!java.time在我看来,它甚至比Joda Time还干净。但是,如果你在Java-8之前仍受困,请继续阅读…

Max询问使用Joda的利弊…

优点:

  • 效果很好。我强烈怀疑Joda中的错误比标准Java库少得多。由于设计的原因,Java库中的某些错误确实很难修复(如果不是不可能的话)。
  • 它旨在鼓励你以正确的方式考虑日期/时间的处理-将“本地时间”(例如“无论我在哪里早上7点叫醒我”)的概念和时间间隔(“我叫詹姆斯”太平洋标准时间(PST)下午3点;可能不是他所在的下午3点,但这是同一时刻”)
  • 我相信这样可以更轻松地更新时区数据库,因为时区数据库的更改确实相对频繁
  • 它具有良好的不变性的故事,这让生活很多容易IME。
  • 从不变性出发,所有格式器都是线程安全的,这非常好,因为你几乎总是想在应用程序中重用单个格式器
  • 你将抢先学习java.timeJava 8,因为它们至少有些相似

缺点:

  • 这是另一个需要学习的API(尽管文档相当不错)
  • 这是另一个可以构建和部署的库
  • 当你使用Java 8时,仍然需要进行一些工作以迁移你的技能
  • 我过去一直未能DateTimeZoneBuilder有效使用。但是,这是一个非常罕见的用例。

为了回应oxbow_lakes有效构建自己的小型API的想法,以下是我对这是一个坏主意的看法:

  • 这是工作。为什么已经为你完成工作?
  • 与自己的API相比,团队的新手更可能熟悉Joda
  • 除了最简单的用途以外,你可能还会犯错……即使你最初认为只需要简单的功能,这些习惯也会使一次变得越来越复杂,甚至一点点。日期和时间操作很难正确执行。此外,内置Java API很难正确使用 -只需查看日历API的日期/时间算术如何工作的规则即可。在这些之上构建任何东西都是一个坏主意,而不是使用一个设计良好的库作为开始。
2020-03-17