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”