Java / Android:逐字比较2个Calendar对象的日期

时间:2017-04-21 02:32:53

标签: java android date calendar

我想将2个日历对象与其日期进行比较。

我的代码:

import numpy as np

im = np.random.ranint(0, 2, (2, 2))
im[np.where(im > 0)] = 255

结果应该是-1或1的int,其中我的情况应该是:-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);

是否有一些方法可以基于Calendar lib实现此目的?

我知道内置的方法,如getDay(),getMonth(),equals()等。问题是在使用getDay(),getMonth(),getYear()时,很难进行比较,因为我在3个整数之间进行比较。

另外,我觉得要比较两个日期,我必须设置时区和timeinMillis是相同的。比较直接日期的意思,对于cal1和cal2,其时区和timeinmillis必须相同。

有人可以向我澄清这个吗?

4 个答案:

答案 0 :(得分:2)

概念的角度来看,你应该小心:compareTo()具有返回int的非常具体的含义,使用--1,0,1结果告诉你如何订购比较的对象。

你正在寻找的那个布尔结果表明你应该使用等号,之前或之后的动词来思考/说话!

采用一个定义明确的概念,保留名称但改变隐含的含义是一个坏主意!

答案 1 :(得分:1)

您可以使用Calendar#beforeCalendar#after进行比较,返回boolean

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));

答案 2 :(得分:1)

TL;博士

LocalDate.of( 2010 , 1 , 20 )
         .isBefore( 
             LocalDate.of( 2014 , 2 , 30 ) 
         )
  

详细

你在错误的班级上使用了错误的方法。

Calendar类表示日期时间。但是你想要一个没有时间的日期值。

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

使用java.time

此外,麻烦的Calendar类是旧的日期时间类之一,现在是旧的,由java.time类取代。

LocalDate类表示没有时间且没有时区的仅限日期的值。

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

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

答案 3 :(得分:0)

你可以这样做

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

根据javadocs

比较两个Calendar对象表示的时间值(与Epoch的毫秒偏移量)。

<强>测试

        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));