日历getTimeInMillis()在更改小时和分钟后返回相同的值

时间:2016-03-30 12:51:51

标签: java android

在以下情况中会出现此问题:

public void setCal(final Calendar calendar) {
  Calendar c1 = pickedDate;
  Calendar c2 = pickedDate;

  Log.d(TAG, c1.getTimeInMillis());
  Log.d(TAG, c2.getTimeInMillis());

  c1.set(Calendar.HOUR_OF_DAY, 10);
  c1.set(Calendar.MINUTE, 20);

  c2.set(Calendar.HOUR_OF_DAY, 18);
  c2.set(Calendar.MINUTE, 30);

  Log.d(TAG, c1.getTimeInMillis());
  Log.d(TAG, c2.getTimeInMillis());
}

在我将调用getTimeInMillis()方法之前和之后的set()值与两个日历进行比较后,我发现它们是相同的。知道为什么会这样吗?

1 个答案:

答案 0 :(得分:5)

这是因为这里:

Calendar c1 = pickedDate;
Calendar c2 = pickedDate;

您将两个对象都设置为pickedDate。因此,任何对象中的任何更改都将更改pickedDate中的值,实际上是c1c2实例。解决这个问题的一种方法是将这些行改为:

Calendar c1 = (Calendar)pickedDate.clone();
Calendar c2 = (Calendar)pickedDate.clone();

这会将它们设置为pickedDate的克隆,即它们不会相同。