多年来,在处理日期和时间时,使用Joda-Time或至少不使用JDK类(Date,Calendar等)已达成共识,因为JDK组件已损坏。
不要从Joda-Time那里拿走任何东西,我已经使用过并且可以证实它很棒,但我不得不问,2011年的Java 7或其任何一个小版本是否解决了这些问题?
我问,因为这些年后,知道JDK是否已经修复并且没有在任何一个方向做出假设都有价值。
答案 0 :(得分:4)
如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
在near future中,Java 8将随java.time.* classes中定义的一组新JSR 310一起提供。这些课程的灵感来自Joda-Time,但完全是重新设计的。 java.time类与Joda-Time有类似的概念,但你肯定需要做一些重新学习。
以下是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的新时间类 - 这些“修复”永远不会改装到当前使用的日期/日历机制,因为它会破坏依赖当前应用程序的向后兼容性机制以它的方式工作(不管有些人看起来很奇怪!)