當前我在使用不贊成的set
方法java.util.Date
。由於我想從它遷移出去,有什麼選擇,它們有什麼優勢?java.util.Date的替代文件
我需要有一個Date
設置爲今天,午夜爲HQL
查詢選擇今天發生的一切。
目前我使用:
Date startingDate = new Date();
startingDate.setHours(0);
startingDate.setMinutes(0);
startingDate.setSeconds(0);
當前我在使用不贊成的set
方法java.util.Date
。由於我想從它遷移出去,有什麼選擇,它們有什麼優勢?java.util.Date的替代文件
我需要有一個Date
設置爲今天,午夜爲HQL
查詢選擇今天發生的一切。
目前我使用:
Date startingDate = new Date();
startingDate.setHours(0);
startingDate.setMinutes(0);
startingDate.setSeconds(0);
注:這個答案是最有可能不再準確的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中的類描述以獲得完整的圖片。
其中'#set'方法:http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#set(int,int,int,int,int,int) – RJo
最好的選擇是使用Joda Time API:
Date date = new DateMidnight().toDate(); // today at 00:00
爲了避免要被棄用DateMidnight
:
Date date = new DateTime().withMillisOfDay(0).toDate();
你可以添加代碼來展示如何做OP與喬達說的? –
DateMidnight()在最新的喬達版本中已棄用 –
沒錯。查看我的編輯:) –
您可以使用喬達日期庫,你會得到很多的靈活性那。否則,您可以使用java.util.Calendar創建自定義日期。
1,替代方案使用java.util.Calendar
對象;
2,詳細使用方法,請參考下面的鏈接;
http://www.leepoint.net/notes-java/other/10time/30calendar.html
日期不處理國際得當,這就是爲什麼它被廢棄。
在JDK 1.1之前,Date類有兩個附加函數。它允許日期的解釋爲年,月,日,小時,分鐘, 和第二個值。它還允許格式化和解析日期 字符串。不幸的是,這些功能的API不適用於國際化的 。從JDK 1開始。1,日曆類應該是 用於在日期和時間字段之間進行轉換,並且應使用DateFormat類 來格式化和分析日期字符串。 Date中相應的 方法已棄用。
最簡單的方法是使用java.util.Calendar
代替:
Calendar calendar = Calendar.getInstance(); // get a calendar instance (current)
和呼叫 calendar.set(...)方法。
請閱讀javadoc ...其中明確提到'Calendar.set'方法是替代方法 – sanbhat
如果您更加抽象地描述了想要做的事情,可以給您更直接的建議。 –
我在Hibernate查詢中使用這些日期變量來搜索從上午12:00開始在同一天創建的記錄。 –