21

每次我需要在 Java 中使用日期和/或时间戳记时,我总是觉得自己做错了什么,并花费无数时间试图找到一种更好的使用 API 的方法,而无需编写自己的日期和时间实用程序类. 这是我刚刚遇到的一些烦人的事情:

  • 基于 0 的月份。我意识到最佳做法是使用 Calendar.SEPTEMBER 而不是 8,但令人讨厌的是 8 代表 9 月而不是 8 月。

  • 获取没有时间戳的日期。我总是需要将日期的时间戳部分清零的实用程序。

  • 我知道我过去还遇到过其他问题,但不记得了。随时在您的回复中添加更多内容。

所以,我的问题是……如果有的话,您使用哪些第三方 API 来简化 Java 对日期和时间操作的使用?对使用Joda有什么想法吗?有人仔细研究过 JSR-310 日期和时间 API 吗?

4

10 回答 10

13
于 2015-10-29T03:58:56.583 回答
11

这篇文章对比较 Java 日期/时间 API 与 JODA 进行了很好的讨论。

我个人只是在需要在 Java 中操作日期/时间的任何时候使用公历SimpleDateFormat 。我在使用 Java API 时从来没有真正遇到过任何问题,并且发现它很容易使用,所以还没有真正研究过任何替代方案。

于 2008-09-17T21:16:00.820 回答
4

Apache Commons Lang 项目有一个DateUtils执行有用的日期操作的类。

我使用DateUtils.truncate()了很多,它会为你“清零”日期的部分(如果你希望你的 Date 对象代表一个日期而不包括任何时间信息,这很有帮助)。每种方法都适用于对象DateCalendar对象。

http://commons.apache.org/lang/

于 2008-09-17T21:58:31.747 回答
3

我已经专门使用 Joda 三年了,并且肯定会推荐它 - 它的整个区域都覆盖着一个界面,可以“按它说的做”。

当您开始时,Joda 可能看起来很复杂,例如它具有看起来有点相似的周期、持续时间和间隔的概念,但您可以通过在代码中替换org.joda.time.DateTime(或org.joda.time.DateMidnight)java.util.Date并坚持使用许多有用的方法来开始类包含,在了解其他领域之前。

于 2008-09-18T00:41:15.770 回答
1

我使用 GregorianCalendar - 随时随地。简单的 java.util.Date 太复杂了,是的。

所以,我的建议是 - 使用 GC,它很简单

于 2008-09-17T21:15:06.017 回答
1

在javascript中也是一样的。当有人认为让 2008 表示 2008 年、31 表示该月的第 31 天以及 - 这是最好的部分 - 11 表示第 12 个月是一个好主意时,他们一定是在抽烟。

另一方面,他们在三分之二的情况下做对了。

于 2008-09-17T21:22:11.320 回答
1

Java 最让我着迷的是日期时间库。我从未使用过 Joda,只是简单地看一下,看起来它是一个非常好的实现,如果我正确理解 JSR-130,它会从 Joda 获取知识并最终将其包含在 JavaSE 中。

对于过去的项目,我经常包装 Java 日期时间对象,这本身就是一项艰巨的任务。然后使用包装器进行日期操作。

于 2008-09-17T21:26:25.427 回答
0

日期 API 很难设计,尤其是当它们必须处理本地化时。试着自己动手看看,至少值得做一次。Joda 能够做得如此出色的事实是对其开发人员的真正功劳。为了回答你的问题,我只听说过关于那个图书馆的好东西,虽然我自己从来没有玩过它。

于 2008-09-17T21:11:23.700 回答
0

许多程序员从使用 Date 开始,它有许多不推荐使用的重载构造函数(使其难以使用),但是一旦你弄清楚 GregorianCalendar,它就会变得更容易管理。这里的例子很有帮助:

http://java.sun.com/j2se/1.4.2/docs/api/java/util/GregorianCalendar.html

于 2008-09-17T21:15:24.970 回答
0

编写自己的日期 API 非常简单,它位于原始 Java 类 Date 和 Calendar 之上。基本上,日期和日历都受到他们试图将两个概念塞进一个类的事实的影响:

  1. 日期(即年-月-日)
  2. 即时(即 currentTimeMillis)

当您理解这一点时,它将彻底改变您在代码中处理类似日期的概念的方式。事情会变得更简单、更清晰、更好。各种意义上!

对我来说,Joda 过于复杂,至少对于绝大多数目的而言,我特别不喜欢他们违背标准 Java 表单的事实,一个例子是他们如何解析和格式化日期。JODA 背后的人 Stephen Colebourne 是 JSR-310 的规范负责人,这也遇到了同样的问题,恕我直言(过去几年我一直关注并参与了讨论)。

自己做; 这简单。只需填写以下类:MyDate(包装年-月-日)、Month(枚举)、TimeOfDay(小时-分-秒-毫秒)、DayOfWeek(枚举)、Instant(包装长)。在即时和日期之间转换时始终考虑时区。

如果这看起来令人生畏,您可以在后台使用 Calendar 和 SimpleDateFormat。你会在一天内做到这一点,永远不会后悔。

于 2008-09-17T21:33:16.283 回答