是否修复了JDK日期/时间问题或者这被认为是否仍然存在问题?

时间:2013-12-27 23:31:46

标签: java java-7 jodatime

多年来,在处理日期和时间时,使用Joda-Time或至少不使用JDK类(DateCalendar等)已达成共识,因为JDK组件已损坏。

不要从Joda-Time那里拿走任何东西,我已经使用过并且可以证实它很棒,但我不得不问,2011年的Java 7或其任何一个小版本是否解决了这些问题?

我问,因为这些年后,知道JDK是否已经修复并且没有在任何一个方向做出假设都有价值。

3 个答案:

答案 0 :(得分:4)

j.u.Date Deprecation

correct answer by Ryan Carlson中所述,某些java.util.Date类'方法已弃用,但不是全部类。

是的,除非其他类需要,否则你当然应该避免使用java.util.Date/Calendar类。它们的设计和实施都很糟糕。尝试使用其他更有能力的库来完成所有计算和业务逻辑。

约达时间

目前,您应该使用Joda-Time 2.3。

快速举例......

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
// import org.joda.time.*;
// import org.joda.time.format.*;

DateTime nowInParis = new DateTime( DateTimeZone.forID( "Europe/Paris" ) );
DateTime newDayInParis = nowInParis.plusDays( 1 ).withTimeAtStartOfDay();

转储到控制台...

System.out.println( "nowInParis: " + nowInParis );
System.out.println( "newDayInParis: " + newDayInParis );

转换为UTC / GMT ...

System.out.println( "now in UTC: " + nowInParis.toDateTime( DateTimeZone.UTC ) );

跑步时......

nowInParis: 2013-12-28T03:20:35.331+01:00
newDayInParis: 2013-12-29T00:00:00.000+01:00
now in UTC: 2013-12-28T02:20:35.331Z

JSR 310

near future中,Java 8将随java.time.* classes中定义的一组新JSR 310一起提供。这些课程的灵感来自Joda-Time,但完全是重新设计的。 java.time类与Joda-Time有类似的概念,但你肯定需要做一些重新学习。

  • 如果可用,使用Java 8 的java.time类。
    Early releases of Java 8可用。
    这些类到Java 7的后端口是开始了,但我不知道现状。
  • 如果不可用,使用Joda-Time
    Joda-Time仍然受到积极支持,并继续在Java 8以及Java 7,6和5中工作。 Java 4你可以使用非常相似的v1.x。

以下是Jeff Friesen撰写的一篇很好的文章,解释了Java 8 java.time。* classes,Java 101: The next generation: It's time for a change – Catching up with the Java Date and Time API

答案 1 :(得分:2)

据我所知,他们仍被视为“破碎”。根据{{​​3}},大多数Date的构造函数和方法都是 Deprecated.

如果我是你,我会继续使用JodaTime。

答案 2 :(得分:0)

除了简单的任务之外,他们仍然被大多数人/许多人视为破碎。简而言之,继续使用Joda时间。

至于它们被修复,“修复”是Java 8的新时间类 - 这些“修复”永远不会改装到当前使用的日期/日历机制,因为它会破坏依赖当前应用程序的向后兼容性机制以它的方式工作(不管有些人看起来很奇怪!)