java.util.Date的替代方案

时间:2013-09-23 11:51:53

标签: java java.util.date

目前我正在使用set已弃用的java.util.Date方法。因为我想要远离它,有什么选择,它们有什么优势?

我需要设置一个Date,设置为今天午夜,HQL查询选择今天发生的所有事情。

目前我使用:

Date startingDate = new Date();
startingDate.setHours(0);
startingDate.setMinutes(0);
startingDate.setSeconds(0);

5 个答案:

答案 0 :(得分:8)

注意:对于Java 8及更高版本,此答案很可能不再准确,现在有better date/calendar API

标准备用使用Calendar对象。

Calendar cal = Calendar.getInstance(); // that is NOW for the timezone configured on the computer.
cal.set(Calendar.HOUR, 0);
cal.set(Calendar.MINUTES, 0);
cal.set(Calendar.SECONDS, 0);
Date startingDate = cal.getTime();

Calendar的优点是没有额外的库,并且被广泛理解。它也是来自Date

Javadoc的文档替代品

Calendar的文档可在此处找到:Javadoc

Calendar有一个危险点(对于粗心的人),那就是after / before方法。他们采用Object但只能正确处理Calendar个对象。在使用它们之前,请务必仔细阅读这些方法的Javadoc。

您可以通过某种方式转换Calendar对象,例如在一周内添加一天(cal.add(Calendar.DAY_OF_YEAR, 1);)或“滚动”(cal.roll(Calendar.DAY_OF_WEEK, 1);)等。阅读Javadoc中的类描述以获得完整的图片。

答案 1 :(得分:2)

最好的选择是使用Joda Time API

Date date = new DateMidnight().toDate();     // today at 00:00

要避免被弃用DateMidnight

Date date = new DateTime().withMillisOfDay(0).toDate();

答案 2 :(得分:0)

您可以使用joda日期库,您将获得很多灵活性。否则,您可以使用java.util.Calendar来创建自定义日期。

答案 3 :(得分:0)

1,替代方案是使用java.util.Calendar对象;

2,详细用法请参考以下链接;

http://www.leepoint.net/notes-java/other/10time/30calendar.html

答案 4 :(得分:0)

日期不能正确处理国际化,这就是它被弃用的原因。

  

在JDK 1.1之前,Date类有两个附加功能。它   允许将日期解释为年,月,日,小时,分钟,   和第二个值。它还允许格式化和解析日期   字符串。不幸的是,这些功能的API不适合   国际化。从JDK 1.1开始,Calendar类应该是   用于在日期和时间字段与DateFormat类之间进行转换   应该用于格式化和解析日期字符串。相应的   不推荐使用Date中的方法。

最简单的替代方法是使用java.util.Calendar代替:

Calendar calendar = Calendar.getInstance(); // get a calendar instance (current)

和电话 calendar.set(...)方法。