以前这个问题似乎没有出现过,所以我在这里提出这个问题:对#34;浅层"的期望是什么?通过Calendar.clone()复制日历,存储的毫秒数变为无效?
我问,因为下面的代码块失败了:
public boolean someFunc(Calendar prevTime, Calendar proposal) {
int submissionMinuteThreshold = 30;
boolean isAfterMinTime;
...
Calendar min = (GregorianCalendar) prevTime.clone();
Log.i("PROJ", "1. Proposed time = " + proposal.getTimeInMillis() + ", min time = " + min.getTimeInMillis());
min.add(Calendar.MINUTE, submissionMinuteThreshold);
Log.i("PROJ", "2. Proposed time = " + proposal.getTimeInMillis() + ", min time = " + min.getTimeInMillis());
isAfterMinTime = proposal.after(min); // returns true even though min is 29 minutes later
我已尝试过以下设置:
proposal
= 2014年10月25日上午10:34
prevTime
= 2014年10月25日上午10:33
日志输出如下所示:
在查看调试器中的min
字段后,我看到add
正确地将小时设置为11,分钟设置为03,日期设置为2014-10-25,所以似乎add
正常运行。但是,在执行比较时,min
中设置的毫秒数是完全错误的,而after
类(Calendar
类)中使用的毫秒数用于比较。
从日志输出中可以看出,存储毫秒的问题的根似乎以Calendar min = (GregorianCalendar) prevTime.clone()
开头。我应该使用其他一些复制方法,以确保以后进行有效的比较吗?
答案 0 :(得分:0)
尝试在proposal.after(min)之前添加min.getTime(),看看它是否正常工作;)..我将留给您阅读源代码并找出原因。
答案 1 :(得分:0)
问题是prevTime的初始化不正确,如prettyvoid所示。