Java/Android:逐字比较两个日历对象的日期

Java/Android:逐字比较两个日历对象的日期,java,android,date,calendar,Java,Android,Date,Calendar,我试图将两个日历对象与其日期进行比较 我的代码: Calendar c1 = Calendar.getInstance(); Calendar c2 = Calendar.getInstance(); c1.set(2017, 1,2); c2.set(2017, 1,1); int compared = c1.compareTo(c2); textView.setText("" + compared); 结果应该是-1或1的整数,在这种情况下,我的情况应该是:-1 然而,这不是

我试图将两个日历对象与其日期进行比较

我的代码:

Calendar c1 = Calendar.getInstance(); 
Calendar c2 = Calendar.getInstance(); 

c1.set(2017, 1,2); 
c2.set(2017, 1,1); 

int compared = c1.compareTo(c2);

textView.setText("" + compared);
结果应该是-1或1的整数,在这种情况下,我的情况应该是:-1

然而,这不是我想要的结果。我希望能够直接比较日期,比如:

01/20/2010 compared to 02/30/2014 returns true or false. 
是否有一些基于日历库的方法来实现这一点

我知道一些内置方法,比如getDay()、getMonth()、equals()等等。问题是,在使用getDay()、getMonth()、getYear()时,比较3个整数非常困难

另外,我觉得要比较两个日期,我必须将时区和timeinMillis设置为相同。意味着要直接比较日期,对于cal1和cal2,其时区和时间单位必须相同

有人能向我澄清一下吗

你可以这样做

textView.setText("c1 compared to c2 returns " + (c1.compareTo(c2) == 0));
根据javadocs

比较由两个日历对象表示的时间值(与历元的毫秒偏移)

测试

        Calendar c1 = Calendar.getInstance();
        Calendar c2 = Calendar.getInstance();
        c2.add(Calendar.MINUTE, 1);

        System.out.println ("c1 compared to c2 returns " + (c1.compareTo(c2) == 0));
你可以这样做

textView.setText("c1 compared to c2 returns " + (c1.compareTo(c2) == 0));
根据javadocs

比较由两个日历对象表示的时间值(与历元的毫秒偏移)

测试

        Calendar c1 = Calendar.getInstance();
        Calendar c2 = Calendar.getInstance();
        c2.add(Calendar.MINUTE, 1);

        System.out.println ("c1 compared to c2 returns " + (c1.compareTo(c2) == 0));
您可以使用或进行比较,该比较返回一个
布尔值

SimpleDateFormat formatC1 = new SimpleDateFormat("yyyy-MM-dd");
String formattedC1 = formatC1.format(c1.getTime());
SimpleDateFormat formatC2 = new SimpleDateFormat("yyyy-MM-dd");
String formattedC2 = formatC2.format(c2.getTime());
textView.setText(formattedC1 + " compared to " + formattedC2 + " returns " + c1.before(c2));
您可以使用或进行比较,该比较返回一个
布尔值

SimpleDateFormat formatC1 = new SimpleDateFormat("yyyy-MM-dd");
String formattedC1 = formatC1.format(c1.getTime());
SimpleDateFormat formatC2 = new SimpleDateFormat("yyyy-MM-dd");
String formattedC2 = formatC2.format(c2.getTime());
textView.setText(formattedC1 + " compared to " + formattedC2 + " returns " + c1.before(c2));

从概念的角度来看,您应该小心:compareTo()有返回int的特殊含义,其中-1,0,1结果告诉您如何对比较的对象进行排序

您正在寻找的布尔结果表明,您应该使用equals、before或after等动词进行思考/说话


这是一个坏主意,采取一个明确的概念,保持名称,但改变的含义下的封面

从概念的角度来看,您应该小心:compareTo()具有返回int的特定含义,其中-1,0,1结果告诉您如何对比较对象排序

您正在寻找的布尔结果表明,您应该使用equals、before或after等动词进行思考/说话

这是一个坏主意,采取一个明确的概念,保持名称,但改变的含义下的封面

tl;博士 真的

细节 您在错误的类上使用了错误的方法

日历类表示一天中的日期和时间。但是您需要一个只包含日期的值,而不包含一天中的时间

您正在调用由具有特定用途的特定接口定义的方法。此方法旨在返回整数,而您希望布尔结果为“isBefore”或“isAfter”

使用java.time 另外,麻烦的
Calendar
类是一个旧的日期时间类,它现在是遗留的,被java.time类取代

该类表示一个仅限日期的值,不包含一天中的时间和时区

LocalDate ld1 = LocalDate.of( 2010 , 1 , 20 ) ;
LocalDate ld2 = LocalDate.of( 2014 , 2 , 30 ) ;
与布尔方法进行比较

boolean ld1IsBefore = ld1.isBefore( ld2 );
boolean ld1IsAfter = ld1.isAfter( ld2 );
boolean ld1IsEqual = ld1.isEqual( ld2 );

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

从哪里获得java.time类

  • ,及以后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 该项目专门为Android采用了ThreeTen Backport(如上所述)
tl;博士 真的

细节 您在错误的类上使用了错误的方法

日历类表示一天中的日期和时间。但是您需要一个只包含日期的值,而不包含一天中的时间

您正在调用由具有特定用途的特定接口定义的方法。此方法旨在返回整数,而您希望布尔结果为“isBefore”或“isAfter”

使用java.time 另外,麻烦的
Calendar
类是一个旧的日期时间类,它现在是遗留的,被java.time类取代

该类表示一个仅限日期的值,不包含一天中的时间和时区

LocalDate ld1 = LocalDate.of( 2010 , 1 , 20 ) ;
LocalDate ld2 = LocalDate.of( 2014 , 2 , 30 ) ;
与布尔方法进行比较

boolean ld1IsBefore = ld1.isBefore( ld2 );
boolean ld1IsAfter = ld1.isAfter( ld2 );
boolean ld1IsEqual = ld1.isEqual( ld2 );

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

从哪里获得java.time类

  • ,及以后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 该项目专门为Android采用了ThreeTen Backport(如上所述)
我确实使用了before()和after()内置函数!然而,它并没有返回我想要的答案。但是,我没有意识到getTime()然后使用SimpleDateTimeFormatter对其进行格式化就可以做到这一点!谢谢你的回答。我确实使用了before()和after()内置函数!然而,它并没有返回我想要的答案。但是,我没有意识到getTime()然后使用SimpleDateTimeFormatter对其进行格式化就可以做到这一点!感谢您的回答。如果参数表示的时间等于此Cal表示的时间,则From返回“值0”