2017-10-05 37 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(); 
    } 
}