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
的改进)中的类之一。谢谢,我会研究它的