Java 日历更改日期
日历正在更改从数据库加载的日期Java 日历更改日期,java,calendar,Java,Calendar,日历正在更改从数据库加载的日期 // resultset fetching database content results = tp.getProjectTasks(projID); Calendar cal = Calendar.getInstance(); int month, day, year, endMonth, endDay, endYear; while (results.next()) { month = Int
// resultset fetching database content
results = tp.getProjectTasks(projID);
Calendar cal = Calendar.getInstance();
int month, day, year, endMonth, endDay, endYear;
while (results.next()) {
month = Integer.parseInt(smf.format(smf.parse(results.getString(7))));
year = Integer.parseInt(syf.format(syf.parse(results.getString(7))));
day = Integer.parseInt(sdf.format(sdf.parse(results.getString(7))));
cal.set(year, month, day, 0, 0, 0);
Date startWork = cal.getTime();
// date is fine here
System.out.println("CAL:"+results.getString(8));
endMonth = Integer.parseInt(smf.format(smf.parse(results.getString(8))));
endYear = Integer.parseInt(syf.format(syf.parse(results.getString(8))));
endDay = Integer.parseInt(sdf.format(sdf.parse(results.getString(8))));
// dates have changed here
System.out.println(endYear+":"+endMonth+":"+endDay);
cal.set(endYear, endMonth, endDay, 0, 0, 0);
//cal.set(2019, 10, 31, 0, 0, 0);
Date endWork = cal.getTime();
// endWork has incorrect Dates
taskModel.add(new TimelineEvent(new Task(results.getString(2), "images/timeline/mail.png", true), startWork, endWork));
}
我将所有语句改为getDate()而不是getString(),问题就解决了。似乎应用程序不喜欢解析从数据库中提取的日期,所以我只是将其作为日期而不是字符串从数据库中检索,从而无需解析检索到的数据。欢迎使用Stack Overflow。不幸的是,你的问题目前有点模糊——我们不知道到底发生了什么变化(
cal
?startWork
?两者都有?)或者以什么方式发生了变化。什么是smf
,syf
等?为什么要让他们在同一条语句中解析和格式化?如果你能提供帮助,那会让你更容易得到帮助。我还建议您尽可能使用java.time
而不是Calendar
和Date
,“很好”和“已经改变”是模糊的。请给出预期和观察结果的准确示例。另外,作为@JonSkeet,我建议您不要使用Calendar
和SimpleDateFormat
,这些类早已过时,设计也很糟糕。请改用。感谢您报告您的解决方案。现在(从JDBC4.2开始),您应该使用results.getObject(7,LocalDate.class)
来检索LocalDate
。它是(getDate
也是对getString
的改进)中的类之一。谢谢,我会研究它的