2013-09-23 24 views
5

當前我在使用不贊成的set方法java.util.Date。由於我想從它遷移出去,有什麼選擇,它們有什麼優勢?java.util.Date的替代文件

我需要有一個Date設置爲今天,午夜爲HQL查詢選擇今天發生的一切。

目前我使用:

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

請閱讀javadoc ...其中明確提到'Calendar.set'方法是替代方法 – sanbhat

+0

如果您更加抽象地描述了想要做的事情,可以給您更直接的建議。 –

+0

我在Hibernate查詢中使用這些日期變量來搜索從上午12:00開始在同一天創建的記錄。 –

回答

7

注:這個答案是最有可能不再準確的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中的類描述以獲得完整的圖片。

+2

其中'#set'方法:http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#set(int,int,int,int,int,int) – RJo

3

最好的選擇是使用Joda Time API

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

爲了避免要被棄用DateMidnight

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

你可以添加代碼來展示如何做OP與喬達說的? –

+0

DateMidnight()在最新的喬達版本中已棄用 –

+0

沒錯。查看我的編輯:) –

0

您可以使用喬達日期庫,你會得到很多的靈活性那。否則,您可以使用java.util.Calendar創建自定義日期。

0

日期不處理國際得當,這就是爲什麼它被廢棄。

在JDK 1.1之前,Date類有兩個附加函數。它允許日期的解釋爲年,月,日,小時,分鐘, 和第二個值。它還允許格式化和解析日期 字符串。不幸的是,這些功能的API不適用於國際化的 。從JDK 1開始。1,日曆類應該是 用於在日期和時間字段之間進行轉換,並且應使用DateFormat類 來格式化和分析日期字符串。 Date中相應的 方法已棄用。

最簡單的方法是使用java.util.Calendar代替:

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

和呼叫 calendar.set(...)方法。