目前我正在使用set
已弃用的java.util.Date
方法。因为我想要远离它,有什么选择,它们有什么优势?
我需要设置一个Date
,设置为今天午夜,HQL
查询选择今天发生的所有事情。
目前我使用:
Date startingDate = new Date();
startingDate.setHours(0);
startingDate.setMinutes(0);
startingDate.setSeconds(0);
答案 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
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(...)方法。