java - JDK 日期/时间的问题是否已修复,或者是否仍被视为已损坏?

标签 java java-7 jodatime

多年来,人们一致同意使用 Joda-Time或者至少在处理日期和时间时不要使用 JDK 类( DateCalendar 等),因为 JDK 组件已损坏。

不要从 Joda-Time 中拿走任何东西,我已经使用过并且可以确认它非常棒,但我不得不问,2011 年的 Java 7 或其任何次要版本是否修复了这些问题?

我问这个问题是因为这么多年过去了,知道 JDK 是否已经修复并且不做任何方向的假设是有值(value)的。

最佳答案

j.u.日期弃用

correct answer by Ryan Carlson 中所述,一些java.util.Date类的方法已被弃用,但不是整个类。

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

Joda Time

目前,您应该使用 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/格林威治标准时间...

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。

这是一篇很好的文章,解释了 Java 8 java.time.* 类,Java 101: The next generation: It's time for a change – Catching up with the Java Date and Time API ,作者:杰夫·弗里森。

关于java - JDK 日期/时间的问题是否已修复,或者是否仍被视为已损坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20809253/

相关文章:

java - Java闭包-三个主要建议之间的语法差异?

java - 如何在mysql中创建一个包含3列的表?

java - 为什么我的程序不能正确处理字符编码?

java - UVA在线判断运行时错误

java - 如何创建一个具有绝对值的 java.util.Date 字段而不改变值的时区偏移?

java - 如何检查我们现在是否位于两个日期时间对象之间?

java - 比较 EST EDT 中的两个 joda DateTime 实例

java - Spring Security 拦截 url 究竟是如何工作的?

java - 如何将编译后的 JasperReport 保存为文件中的 .jasper

java - OutOfMemoryException(升级到 JDK 7u45 后)