好吧,我正式难住了这一点。我有一个GregorianCalendar对象,我想确定它是否在过去、现在或未来。迄今为止, 日历#compareTo 文是令人困惑我在这我越来越不稳定的结果。一个简单的试验级会说明我的问题:

import java.util.Calendar;
import java.util.GregorianCalendar;
public class MyCal
{

        public static void main( String[] args )
        {
                GregorianCalendar datePast = new GregorianCalendar();
                datePast.add(Calendar.MONTH, -6); // subtract 6 months
                GregorianCalendar datePresent = new GregorianCalendar();
                GregorianCalendar dateFuture = new GregorianCalendar();
                datePast.add(Calendar.MONTH, 6); // add 6 months

                System.out.println("compare datePresent to datePast: "+datePresent.compareTo(datePast));
                System.out.println("compare datePresent to datePresent: "+datePresent.compareTo(datePresent));
                System.out.println("compare datePresent to dateFuture: "+datePresent.compareTo(dateFuture));
        }
}

和输出:

compare datePresent to datePast: 1
compare datePresent to datePresent: 0
compare datePresent to dateFuture: 0

我的理解compareTo是,最后一行,应该是a-1.谁能告诉我我做错了什么?

有帮助吗?

解决方案

您已经添加了6个月至datePast,不dateFuture。这里的工作代码:

import java.util.Calendar;
import java.util.GregorianCalendar;
public class MyCal
{

    public static void main( String[] args )
    {
        GregorianCalendar datePast = new GregorianCalendar();
        datePast.add(Calendar.MONTH, -6); // subtract 6 months
        GregorianCalendar datePresent = new GregorianCalendar();
        GregorianCalendar dateFuture = new GregorianCalendar();
        dateFuture.add(Calendar.MONTH, 6); // add 6 months

        System.out.println("compare datePresent to datePast: "+datePresent.compareTo(datePast));
        System.out.println("compare datePresent to datePresent: "+datePresent.compareTo(datePresent));
        System.out.println("compare datePresent to dateFuture: "+datePresent.compareTo(dateFuture));
    }
}

您的结果将是不一致的,因为有时 dateFuture将迟于datePresent,这取决于当内部时钟“滴答”上。

在除了这一切,我不禁给我的标准Java日期和时间的建议是:使用的约达时间改为的。这不是负责这方面的问题,但事实上,许多类型的不可变会有所帮助。但总的来说这是一个的的更好库。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top