2012-02-27 130 views
0

我有一個數據庫字段,日期存儲爲DD/MM/YYYY格式。現在我想要做的是看看今天是否=存儲日期 - 1.基本上如果今天是結束日期前一天。在此基礎上,我會做一些動作......格式的Java日期計算

例如:因爲現在用這個

10/02/2012 

有格式化的問題在這裏:

Date todayDate; 

而且保存的日期是在VARCHAR2 D B。假設我必須將檢索到的日期轉換爲Date常規格式,或類似的東西。幫助將不勝感激。

更新:

   currentEndDate = rset.getString("ENDDATE"); 
       endDate = (Date)formatter.parse(currentEndDate); 
       /*Check if end date = today date - 1*/ 
       Calendar cal = Calendar.getInstance(); 
       //set to end date 
       cal.setTime(endDate); 
       //end date - 1 
       cal.add(Calendar.DATE, -1); 
       Date today; 

現在,這是我have..I我試圖在這裏得到的結束日期-1,所以我這樣做,使用add()函數。現在我怎樣才能檢查結束日期 - 1 ==今天的日期?因爲當我嘗試時:

if(today.equals(cal.add(Calendar.date, -1))) 

它說無效返回從add函數。 謝謝,

回答

1

這直接爲Date例如你需要把字符串轉換成日期。你可以在你的查詢做,或者你得到的字符串結果後:

選項1:把它變成一個Date類型在您的查詢:

SELECT TO_DATE("COLNAME", 'MM/DD/YYYY') FROM "MYTABLE" 

選項2:之後,你把它變成一個Date類型得到字符串:

String date_from_db; 
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy"); 
Date date = sdf.parse(date_from_db); 

然後你可以看到,如果當前時間(new Date())是檢索日期,在此之前一天之間。如果你想處理包括閏秒在內的所有邊角情況,你必須使用Calendar,但如果你沒有甩掉閏秒,那麼只需從中減去24 * 60 * 60 * 1000毫秒即可你的數據庫日期。

你不能直接比較一個DateCalendar爲每API documentation

...對象是相等的,當且僅當getTime方法返回兩個

也同樣長的值,Calendarequals()將不起作用:

結果爲真當且僅當參數是相同的日曆系統的日曆對象,它表示同一時間值

簡單的解決方案:使用CalendargetTime()方法,它返回一個Date對象WH ich將隨時與使用equals(),after()before()的其他日期進行比較。

或者代碼:

cal.add(Calendar.DAY, -1); 
if(cal.getTime().equals(new Date())) { ... } 

你也可以實例化另一個Calendar並使用其setTime(),但似乎效率不高。

+0

感謝mate..this將在這裏進行一些修改工作,並有 – 2012-02-27 05:41:23

+0

@sys_debug我已經編輯我的答案來解決您的次要問題。您可能還想將'today'實例化爲'new Date()'。 – bdares 2012-02-28 12:29:55

+0

感謝隊友再次支持 – 2012-02-29 04:56:58

1

您可以直接在你的數據庫使用Date類型,你可以在Java

3

有涉及三個時間JDBC類型:

  1. JDBC DATE類型的代表包括日,月,年的日期。相應的SQL DATE類型在SQL-92中定義,但它僅由主要數據庫的一個子集實現。一些數據庫提供了支持相似語義的備選SQL類型。
  2. JDBC TIME類型表示由小時,分鐘和秒組成的時間。相應的SQL TIME類型在SQL-92中定義,但它僅由主要數據庫的一個子集實現。和DATE一樣,一些數據庫提供了支持相似語義的替代SQL類型。
  3. JDBC TIMESTAMP類型表示DATE加TIME加納秒字段。 SQL-92中定義了相應的SQL TIMESTAMP類型,但它僅由極少數的數據庫實現。

由於標準的Java類java.util.Date不匹配任何恰好這三個JDBC日期/時間類型的(它包括日期和時間信息,但沒有毫微秒),JDBC定義的java.util.Date三個子類,以對應於SQL類型。它們是:

  1. java.sql.Date爲SQL DATE信息。 java.util.Date基類的小時,分​​鍾,秒和毫秒字段應設置爲零。如果提供給java.sql.Date構造函數的毫秒數爲負數,那麼驅動程序將計算該日期爲1970年1月1日之前的毫秒數。否則,該日期將計算爲指定的毫秒數, 1970.
  2. java.sql.Time SQL TIME信息。 java.util.Date基類的年,月和日字段設置爲1970年1月和1日。這是Java時期的「零」日期。
  3. java.sql.Timestamp用於SQL TIMESTAMP信息。該類通過添加納秒字段來擴展java.util.Date。

所有三個JDBC時間相關的類是java.util.Date子類,因此,它們可以用在一個java.util.Date預期。例如,國際化方法使用java.util.Date對象作爲參數,以便它們可以傳遞任何JDBC時間相關類的實例。

JDBC Timestamp對象具有父級的日期和時間組件,也是單獨的納秒級組件。如果使用java.sql.Timestamp對象,那麼在期望java.util.Date對象時,納秒組件會丟失。

但是,由於java.util.Date對象以1毫秒的精度存儲,所以在將java.sql.Timestamp對象轉換爲java.util.Date對象時,可以保持這種精度。這是通過將毫微秒組件中的納秒轉換爲整個毫秒(將納秒數除以1,000,000),然後將結果添加到java.util.Date對象來完成的。此轉換中可能會丟失999,999納秒,但生成的java.util.Date對象將精確到毫秒。

以下代碼片段是將java.sql.Timestamp對象轉換爲精確到1毫秒的java.util.Date對象的示例。

Timestamp t = new Timestamp(98724573287540L); 
java.util.Date d; 
d = new java.util.Date(t.getTime() + (t.getNanos()/1000000)); 
+0

哇這是詳細和良好的...謝謝隊友:) – 2012-02-27 05:41:42