我正在创建一个基于 Web 的系统,该系统将在世界各地的国家/地区使用。必须存储的一类数据是日期和时间。
与Joda time等 3rd 方库相比,使用 Java 日期和时间类的优缺点是什么?我想这些第三方库的存在是有充分理由的,但我自己从来没有真正比较过它们。
我正在创建一个基于 Web 的系统,该系统将在世界各地的国家/地区使用。必须存储的一类数据是日期和时间。
与Joda time等 3rd 方库相比,使用 Java 日期和时间类的优缺点是什么?我想这些第三方库的存在是有充分理由的,但我自己从来没有真正比较过它们。
编辑:现在 Java 8 已经发布,如果你可以使用它,那就这样做吧!java.time
在我看来,它甚至比 Joda Time 更干净。但是,如果您在 Java-8 之前遇到问题,请继续阅读...
Max 询问了使用 Joda 的利弊……
优点:
java.time
Java 8 方面占得先机,因为它们至少有些相似缺点:
DateTimeZoneBuilder
有效地使用。这是一个非常罕见的用例。为了响应 oxbow_lakes 有效构建自己的小型 API 的想法,以下是我对为什么这是一个坏主意的看法:
答案是:这取决于
JODA(和 JSR-310)是一个功能齐全的日期/时间库,包括支持与多个日历系统一起使用。
就我个人而言,就我所需要的复杂性而言,我发现 JODA 走得太远了。标准 javaDate
和Calendar
类中的 2 个主要(恕我直言)错误是:
YearMonthDay
尽管 JODA 解决了这些问题,但您会发现为和滚动您自己的类非常容易Instant
,它们都使用底层的 java 类进行实际的“日历”计算。然后,您不必熟悉超过 100 个类的 API、不同的格式/解析机制等。
当然,如果您确实需要不同年表的完整表示(例如希伯来语)或希望能够定义自己的虚构日历系统(例如,对于您正在编写的游戏),那么也许 JODA 或 JRS-310 适合您。如果没有,那么我建议您自己滚动可能是要走的路。
JSR-310 规范负责人是第一位编写 JODA 的 Stephen Colebourne,因此在逻辑上将取代JODA。
这完全取决于您对日期的处理。如果您只是简单地保留它们,Java 内置的 Dates 可能会满足您的所有需求。但是,如果您正在进行大量的时间日期操作,那么使用 Joda 可能会更好。
您应该使用 Joda-Time 库,因为:
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/