2017-10-05 78 views
0

我試着在Java中創建一個方法,它將採用當前日期或存儲日期 - 並且在x之前或之後獲得x天。在日期計算方法中的Java日期鑄造問題

//28 days ago 
java.util.Date thresholdPast28Date = BasicUtils.setTimeInDays(sqlTodayDate, -28); 

//56 days ago 
java.util.Date thresholdPast56Date = BasicUtils.setTimeInDays(sqlTodayDate, -56); 

功能看起來像這樣

public static Date setTimeInDays(Date startingTime, Integer days){ 
    Calendar c = Calendar.getInstance(); 
    c.setTime(startingTime); 
    c.add(Calendar.DATE, days);//a day in the future or past 
    return c.getTime(); 
} 

我得到的錯誤,雖然試圖把今天的日期到這個方法。

java.util.Date cannot be cast to java.sql.Date 

- 讓今天幾號這樣

//today date 
Calendar today = Calendar.getInstance(); 
Date sqlTodayDate = (Date) today.getTime(); 
+0

試試這個:'java.util.Date todayDate = today.getTime();' – procrastinator

+0

那麼想必你'setTimeInDays'方法是在導入真實'java.sql.Date'而不是'的Java類。 util.Date'。你想要哪種類型的產品? –

+0

好 - 都是?它的存儲日期工作 - 現在我試圖獲取今天的日期,並將其推入方法 - 這是什麼導致我的錯誤 - 但我不確定如何將util.date轉換爲sql.date - –

回答

0

這裏的問題是你想投java.util.Datejava.sql.Date這一行。

java.sql.Date sqlTodayDate = (java.sql.Date) today.getTime();

您應該簡單地使用,

java.util.Date sqlTodayDate = today.getTime();

所以,最終的工作代碼看起來像,

import java.util.Date; 
import java.util.Calendar; 

public class Test2 { 
    public static void main(String[] args) { 
     Calendar today = Calendar.getInstance(); 
     Date sqlTodayDate = today.getTime(); 

     //28 days ago 
     java.util.Date thresholdPast28Date = BasicUtils.setTimeInDays(sqlTodayDate, -28); 

     System.out.println(thresholdPast28Date); 

     //56 days ago 
     java.util.Date thresholdPast56Date = BasicUtils.setTimeInDays(sqlTodayDate, -56); 

     System.out.println(thresholdPast56Date); 
    } 
} 

class BasicUtils { 
    public static Date setTimeInDays(Date startingTime, Integer days){ 
     Calendar c = Calendar.getInstance(); 
     c.setTime(startingTime); 
     c.add(Calendar.DATE, days);//a day in the future or past 
     return c.getTime(); 
    } 
} 

注:Calendar.getInstance()將需要一些時間來執行。 您可以直接使用java.util.Date sqlTodayDate = new java.util.Date()

如果您堅持使用java.sql.Date,以下內容適用於您。

import java.sql.Date; 
import java.util.Calendar; 

public class Test2 { 
    public static void main(String[] args) { 
     Calendar today = Calendar.getInstance(); 
     Date sqlTodayDate = new Date(today.getTimeInMillis()); 

     //28 days ago 
     java.util.Date thresholdPast28Date = BasicUtils.setTimeInDays(sqlTodayDate, -28); 

     System.out.println(thresholdPast28Date); 

     //56 days ago 
     java.util.Date thresholdPast56Date = BasicUtils.setTimeInDays(sqlTodayDate, -56); 

     System.out.println(thresholdPast56Date); 
    } 
} 

class BasicUtils { 
    public static java.util.Date setTimeInDays(Date startingTime, Integer days){ 
     Calendar c = Calendar.getInstance(); 
     c.setTime(startingTime); 
     c.add(Calendar.DATE, days);//a day in the future or past 
     return c.getTime(); 
    } 
}