这是我的程序,我试过
java.sql.Date logicalDate;
Calendar c = Calendar.getInstance();
c.setTime(logicalDate);
c.add(Calendar.DATE, 1);
下面的行显示错误,构造函数Date(date)未定义
java.sql.Date startDate= new java.sql.Date(c.getTime());
如何在java.sql.Date logicalDate中添加1天?
答案 0 :(得分:8)
Calendar#getTime
返回java.util.Date
的{{1}}个代表。您确实需要使用Calendar#getTimeInMillis
而不是
Calendar
答案 1 :(得分:2)
import java.sql.Date;
import java.time.LocalTime;
import java.util.Calendar;
import java.util.List;
import java.util.stream.Collectors;
public class Test {
public static void main(String a[]) {
java.sql.Date todaysDate = new java.sql.Date(new java.util.Date().getTime());
int futureDay =1;
int pastDay=2;
java.sql.Date futureDate = this.addDays(todaysDate, futureDay);
java.sql.Date pastDate = this.subtractDays(todaysDate, pastDay);
System.out.println("futureDate =>>> " + futureDate);
System.out.println("pastDate =>>> " + pastDate);
}
public static Date addDays(Date date, int days) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE, days);
return new Date(c.getTimeInMillis());
}
public static Date subtractDays(Date date, int days) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE, -days);
return new Date(c.getTimeInMillis());
}
}
答案 2 :(得分:2)
永远不要使用可怕的旧类java.sql.Date
,java.util.Calendar
,java.util.GregorianCalendar
和java.util.Date
。仅使用 java.time 类。
如何将1天添加到java.sql.Date logicalDate?
从旧类java.sql.Date
转换为现代类java.time.LocalDate
。然后调用plus…
/ minus…
方法来添加/减去天,周,月或年。
myJavaSqlDate.toLocalDate().plusDays( 1 )
如果给定的Calendar
实际上是GregorianCalendar
,而您只想要日期,请转换为ZonedDateTime
并提取一个LocalDate
。
( (GregorianCalendar) myCal ) // Cast from general `Calendar` to more concrete class `GregorianCalendar`.
.toZonedDateTime() // Convert from the legacy class to the modern `ZonedDateTime` class replacement.
.toLocalDate() // Extract the date only, omitting the time-of-day and the time zone.
.plusWeeks( 1 ) // Returns a `LocalDate` object, a date without a time-of-day and without a time zone.
设计糟糕的java.sql.Date
类在多年前被现代的 java.time 类和unanimous adoption的JSR 310所取代。也避免使用Calendar
类。
通过调用JDBC 4.2,用ResultSet::getObject
从数据库中检索。
LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ;
致电LocalDate::plusWeeks
,以增加一周的时间。
LocalDate weekLater = ld.plusWeeks( 1 ) ;
通过调用PreparedStatement::setObject
写入数据库。
myPreparedStatement.setObject( … , weekLater ) ;
最好完全避免麻烦的旧式日期时间类。但是,如果您需要一个java.sql.Date
对象来与尚未更新为 java.time 的旧代码进行互操作,请使用添加到旧类中的新转换方法。具体来说,java.sql.Date.valueOf
。
java.sql.Date d = java.sql.Date.valueOf( ld ) ;
java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和SimpleDateFormat
。
要了解更多信息,请参阅Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规范为JSR 310。
Joda-Time项目(现在位于maintenance mode中)建议迁移到java.time类。
您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
在哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展了java.time。该项目为将来可能在java.time中添加内容打下了基础。您可能会在这里找到一些有用的类,例如Interval
,YearWeek
,YearQuarter
和more。
答案 3 :(得分:1)
试试这个:
Calendar cNow = Calendar.getInstance();
Date dNow = cNow.getTime();
cNow.add(Calendar.DATE, 7);
Date dSeven = cNow.getTime();
SimpleDateFormat format = new SimpleDateFormat("MMM dd, yyyy hh:mm:ss a");
String dateNow = format.format(dNow);
String dayBefore = format.format(dSeven);
System.out.println(dateNow);
System.out.println(daySeven); //here is your current day + 7
Date date = new Date();
System.out.println(date);
答案 4 :(得分:1)
这是一种方法
private Date sqlDatePlusDays(Date date, int days) {
return Date.valueOf(date.toLocalDate().plusDays(days));
}