目前我正在使用已弃用set
的java.util.Date
. 当我想摆脱它时,有哪些替代方案以及它们有什么优势?
我需要一个Date
设置为今天午夜的HQL
查询,以选择今天发生的所有事情。
目前我使用:
Date startingDate = new Date();
startingDate.setHours(0);
startingDate.setMinutes(0);
startingDate.setSeconds(0);
目前我正在使用已弃用set
的java.util.Date
. 当我想摆脱它时,有哪些替代方案以及它们有什么优势?
我需要一个Date
设置为今天午夜的HQL
查询,以选择今天发生的所有事情。
目前我使用:
Date startingDate = new Date();
startingDate.setHours(0);
startingDate.setMinutes(0);
startingDate.setSeconds(0);
注意:对于 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 中的类描述以获得全貌。
最好的选择是使用Joda Time API:
Date date = new DateMidnight().toDate(); // today at 00:00
为了避免被弃用DateMidnight
:
Date date = new DateTime().withMillisOfDay(0).toDate();
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(...) 方法。
您可以使用 joda 日期库,您将获得很大的灵活性。否则,您可以使用 java.util.Calendar 来创建自定义日期。
1、alternate正在使用java.util.Calendar
Object;
2、详细使用方法请参考以下链接;
http://www.leepoint.net/notes-java/other/10time/30calendar.html