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

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

与Joda时间等第三方库相比,使用Java日期和时间类有哪些优缺点? 我猜这些第三方库的存在是有原因的,但我从来没有真正比较过他们自己。


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

Max询问使用Joda的优缺点......

优点:

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

  • 这是另一种学习API(尽管文档非常好)
  • 这是另一个建立和部署的图书馆
  • 当你使用Java 8时,仍然有一些工作需要迁移你的技能
  • 我过去未能有效地使用DateTimeZoneBuilder 。 但这是一个非常罕见的用例。
  • 为了回应oxbow_lakes有效构建您自己的小型API的想法,以下是我对这是一个坏主意的看法:

  • 是工作。 为什么在你已经完成的时候工作?
  • 你的团队的新手更可能熟悉Joda,而不是使用自己开发的API
  • 对于超出最简单用途的任何事情,您都可能会犯错误......即使您最初认为您只需要简单的功能,这些事情也有一种越来越复杂的习惯,一次只能做一点点。 日期和时间操作很难正确执行。 此外,内置的Java API很难正确使用 - 只需查看日历API的日期/时间算法工作原理即可。 在这些之上构建任何东西都不是一个好主意,而不是使用精心设计的库来开始。

  • 那么,除非你打算等待Java 8,希望他们能够实现一个更好的API来处理日期和时间,是的,请使用Joda-Time。 节省时间并避免许多麻烦。


    答案是:这取决于

    JODA(和JSR-310)是一个功能齐全的日期/时间库,包括支持多个日历系统的使用。

    就我个人而言,我发现JODA对于我所需要的复杂性来说太过分了。 标准java DateCalendar类中的两个主体(恕我直言)错误是:

  • 他们是可变的
  • 他们混合了即时即时的年 - 月日概念
  • 虽然JODA解决了这些问题,但您会发现为YearMonthDayInstant YearMonthDay自己的类很容易,它们都使用实际“日历”计算中的java类进行实现。 然后,您不必熟悉> 100个类的API,不同的格式化/解析机制等。

    当然,如果你确实需要不同年表(如希伯来语)的完整表示,或者希望能够定义你自己想象中的日历系统(例如你正在写一个游戏),那么JODA或JRS-310可能就是你的。 如果不是的话,那么我会建议,滚动你自己可能是一条路。

    JSR-310规格的领先者是Stephen Colebourne,他在第一位写JODA,所以会在逻辑上取代JODA。

    链接地址: http://www.djcxy.com/p/18765.html

    上一篇: Should I use Java date and time classes or go with a 3rd party library like Joda Time?

    下一篇: Calculating Date in JavaScript