Calendar.clone()错误地复制毫秒

时间:2014-10-24 23:44:37

标签: java android calendar gregorian-calendar

以前这个问题似乎没有出现过,所以我在这里提出这个问题:对#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

日志输出如下所示:

  1. 建议时间= 1414247640000,最短时间= -61180824420000
  2. 建议时间= 1414247640000,最短时间= -61180822620000
  3. 在查看调试器中的min字段后,我看到add正确地将小时设置为11,分钟设置为03,日期设置为2014-10-25,所以似乎add正常运行。但是,在执行比较时,min中设置的毫秒数是完全错误的,而after类(Calendar类)中使用的毫秒数用于比较。

    从日志输出中可以看出,存储毫秒的问题的根似乎以Calendar min = (GregorianCalendar) prevTime.clone()开头。我应该使用其他一些复制方法,以确保以后进行有效的比较吗?

2 个答案:

答案 0 :(得分:0)

尝试在proposal.after(min)之前添加min.getTime(),看看它是否正常工作;)..我将留给您阅读源代码并找出原因。

答案 1 :(得分:0)

问题是prevTime的初始化不正确,如prettyvoid所示。