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

use*_*562 0 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());
}
Run Code Online (Sandbox Code Playgroud)

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

dry*_*hip 5

这是因为这里:

Calendar c1 = pickedDate;
Calendar c2 = pickedDate;
Run Code Online (Sandbox Code Playgroud)

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

Calendar c1 = (Calendar)pickedDate.clone();
Calendar c2 = (Calendar)pickedDate.clone();
Run Code Online (Sandbox Code Playgroud)

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