Java 如何修改日历

Java 如何修改日历,java,calendar,Java,Calendar,我需要插入两列:BeginHour和EndHour dates和times,它们是日历类型的 我有一个生成BeginHour的方法,然后我将其修改为EndHour。最后,我调用DAO方法将它们插入到表中 问题是我发现变量'cal'的最后一次修改是在两列中 例如,如果BeginHour为2014-03-2415:23:10,则结束时间应为2014-03-2415:28:20 但在我的表格中,我在两列中找到了EndHour:2014-03-2415:28:20 Calendar cal = mock

我需要插入两列:BeginHour和EndHour dates和times,它们是日历类型的

我有一个生成BeginHour的方法,然后我将其修改为EndHour。最后,我调用DAO方法将它们插入到表中

问题是我发现变量'cal'的最后一次修改是在两列中

例如,如果BeginHour为2014-03-2415:23:10,则结束时间应为2014-03-2415:28:20 但在我的表格中,我在两列中找到了EndHour:2014-03-2415:28:20

Calendar cal = mock.randomBeginHour();
        consoApp.setBeginHour(cal);  
    cal.add(Calendar.MINUTE, +5);
    cal.add(Calendar.SECOND, +10);
        consoApp.setEndHour(cal);
        dao.addConsoAppel(consoApp)

您对
beginHour
endHour
使用相同的
Calendar
对象引用。改为创建两个不同的
日历。您可以使用
Calendar#getInstance()
轻松创建另一个
Calendar
实例,并在第一个日历中指定时间来设置另一个日历的开始时间。代码:

Calendar cal = mock.randomBeginHour();
consoApp.setBeginHour(cal);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(cal.getTime());
cal2.add(Calendar.MINUTE, +5);
cal2.add(Calendar.SECOND, +10);
consoApp.setEndHour(cal2);
dao.addConsoAppel(consoApp);

这是因为变量cal的值是通过引用传递的。所以beginHour和endHour都得到了相同的值。您应该为endHour创建一个新的日历实例,将其值分配给beginHour,然后进行添加

这是因为变量cal的值是通过引用传递的Java从不通过引用传递,而是通过值传递的。在本例中,它传递引用的副本(该副本是指向同一引用的值)。