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

2022-08-31 07:44:46

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

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


答案 1

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

马克斯询问了使用Joda的利弊...

优点:

  • 它工作得很好。我强烈怀疑Joda中的错误远远少于标准的Java库。由于设计的原因,Java库中的一些错误确实很难(如果不是不可能)修复。
  • 它旨在鼓励您以正确的方式考虑日期/时间处理 - 将“本地时间”的概念(例如“无论我在哪里,在早上7点叫醒我”)和即时(“我在太平洋标准时间下午3点打电话给詹姆斯;他所在的位置可能不是下午3点,但这是相同的瞬间“)
  • 我相信它使更新时区数据库变得更加容易,该数据库确实相对频繁地更改
  • 它有一个很好的不变性故事,这使得IME的生活变得更加轻松。
  • 从不可变性开始,所有格式化程序都是线程安全的,这很好,因为您几乎总是希望通过应用程序重用单个格式化程序
  • 您将在Java 8中学习方面领先一步,因为它们至少有些相似java.time

缺点:

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

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

  • 这是工作。为什么在已经为您完成工作的情况下工作?
  • 您团队的新成员更有可能熟悉Joda,而不是您自己开发的API。
  • 除了最简单的用途之外,你很可能会弄错任何东西......即使你最初认为你只需要简单的功能,这些东西也有一个习惯,一次一点点地变得越来越复杂。日期和时间操作很难正确执行。此外,内置的Java API很难正确使用 - 只需查看日历API的日期/时间算术工作原理的规则即可。在这些之上构建任何东西都是一个坏主意,而不是使用一个精心设计的库。

答案 2

好吧,除非你打算等待Java 8,希望他们能实现一个更好的API来操作日期和时间,是的,请使用Joda-Time。它节省了时间,避免了许多头痛。