6

目前我正在使用已弃用setjava.util.Date. 当我想摆脱它时,有哪些替代方案以及它们有什么优势?

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

目前我使用:

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

5 回答 5

8

注意:对于 Java 8 及更高版本,此答案很可能不再准确,现在有更好的日期/日历 API

标准的替代方法是使用Calendar对象。

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

Calendar具有无需额外库的优势,并且被广泛理解。它也是来自Javadoc的文档化替代方案Date

的文档Calendar可以在这里找到:Javadoc

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

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

于 2013-09-23T11:53:36.283 回答
2

最好的选择是使用Joda Time API

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

为了避免被弃用DateMidnight

Date date = new DateTime().withMillisOfDay(0).toDate();
于 2013-09-23T11:55:24.873 回答
0

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

在 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(...) 方法。

于 2013-09-23T12:01:44.860 回答
-1

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

于 2013-09-23T11:55:57.800 回答
-2

1、alternate正在使用java.util.CalendarObject;

2、详细使用方法请参考以下链接;

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

于 2013-09-23T11:57:06.753 回答