为Calendar对象添加时间不更新?

时间:2018-05-07 19:59:19

标签: java

所以这就是我现在所拥有的:

public static void main(String[] args) {
    Calendar[][] times = new Calendar[10][2];
    Calendar begin = Calendar.getInstance();
    for(int i = 0; i < 10; i++) {
        times[i][0] = begin;
        begin.add(Calendar.MINUTE, 120);
        times[i][1] = begin;
    }
    for(int i = 0; i < 10; i++) {
        System.out.println("Start time:"  + times[i][0].getTime() + " and end time is: " + times[i][1].getTime());
    }

}

根据我对如何在Calendar类中工作的理解,我希望时间[0] [0]是编译时间,时间[0] [1]将来是120分钟。接下来运行循环时间[1] [0]等于[0] [1]次,时间[1] [1]将等于120分钟。这是不正确的?它目前为阵列的每个成员输出相同的时间。

编辑:感谢大家的帮助,这里是正确的代码:

public static void main(String[] args) {
    Calendar[][] times = new Calendar[10][2];
    Calendar begin = Calendar.getInstance();
    for(int i = 0; i < 10; i++) {
        times[i][0] = (Calendar) begin.clone();
        begin.add(Calendar.MINUTE, 120);
        times[i][1] = (Calendar) begin.clone();
    }
    for(int i = 0; i < 10; i++) {
        System.out.println("Start time:"  + times[i][0].getTime() + " and end time is: " + times[i][1].getTime());
    }

}

2 个答案:

答案 0 :(得分:0)

您将times的引用分配给begin数组中的所有对象。你实际上做的是改变times[i][0] = (Calendar) begin.clone(); Calendar hourLater = (Calendar) begin.clone(); hourLater(Calendar.MINUTE, 120); times[i][1] = hourLater; begin = hourLater; 的相同值 - 它是从所有数组元素引用的。

如果您需要以某种方式相对于现有的新日历实例,您可能想要克隆它:

I am loop

答案 1 :(得分:0)

import java.util.*;
public class HelloWorld{

     public static void main(String []args){
            Calendar[][] times = new Calendar[10][2];
            Calendar begin = Calendar.getInstance();
            for(int i = 0; i < 10; i++) {
                times[i][0] = begin;
                begin = (Calendar)begin.clone();
                begin.add(Calendar.MINUTE, 120);
                times[i][1] = begin;
            }
            for(int i = 0; i < 10; i++) {
                System.out.println("Start time:"  + times[i][0].getTime() + " and end time is: " + times[i][1].getTime());
            }

     }
}