我正在创建一个基于Web的系统,将被用于世界各地的国家。必须存储的一种数据是日期和时间。
相比第三方库(如Joda时间),使用Java日期和时间类有哪些优缺点?我想这些第三方库存在有其好的原因,但我从未真正比较过它们。
我正在创建一个基于Web的系统,将被用于世界各地的国家。必须存储的一种数据是日期和时间。
相比第三方库(如Joda时间),使用Java日期和时间类有哪些优缺点?我想这些第三方库存在有其好的原因,但我从未真正比较过它们。
EDIT: 现在 Java 8 已经发布了,如果你能使用它,请使用!我认为 java.time
比 Joda Time 更加简洁。然而,如果你还在使用 Java 8 之前的版本,继续阅读...
Max询问使用Joda的利弊:
优点:
java.time
的一个良好开端,因为它们至少有些相似。缺点:
DateTimeZoneBuilder
。但这是一个非常罕见的情况。针对 oxbow_lakes 构建自己的小型 API 的想法,以下是我认为这样做的不良影响:
java.time.*
的后移版本:http://www.threeten.org/threetenbp/ - MiscreantJODA(和JSR-310)是一个完全功能的日期/时间库,支持使用多个日历系统。
个人认为,对于我所需的内容而言,JODA在复杂性方面步伐太大了。标准Java Date
和Calendar
类中的两个主要(在我看来)错误是:
虽然JODA解决了这些问题,但您会发现很容易为YearMonthDay
和Instant
编写自己的类,这两个类都在底层使用Java类进行实际“日历”计算。然后,您就不必熟悉超过100个类的API、不同的格式化/解析机制等。
当然,如果您确实需要完整表示不同的年表(例如希伯来语)或希望能够定义自己的想象日历系统(例如为您编写的游戏),那么也许JODA或JRS-310适合您。否则,我建议编写自己的代码可能是更好的选择。
JSR-310规范的负责人是Stephen Colebourne,他首先编写了JODA,因此将在逻辑上替换JODA。
Exception in thread "main"
org.joda.time.IllegalFieldValueException: Cannot parse "2014-02-31":
Value 31 for dayOfMonth must be in the range [1,28].
您可能会喜欢这个页面以了解更多细节: http://swcodes.blogspot.com/
这完全取决于你对日期的处理。如果你只是将它们持久化,那么Java内置的Dates可能已经能够满足你的所有需求了。但是,如果你需要进行大量的时间日期操作,使用Joda会更好。