我想将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必须相同。
有人可以向我澄清这个吗?
答案 0 :(得分:2)
从概念的角度来看,你应该小心:compareTo()具有返回int的非常具体的含义,使用--1,0,1结果告诉你如何订购比较的对象。
你正在寻找的那个布尔结果表明你应该使用等号,之前或之后的动词来思考/说话!
采用一个定义明确的概念,保留名称但改变隐含的含义是一个坏主意!
答案 1 :(得分:1)
您可以使用Calendar#before或Calendar#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)
LocalDate.of( 2010 , 1 , 20 )
.isBefore(
LocalDate.of( 2014 , 2 , 30 )
)
真
你在错误的班级上使用了错误的方法。
Calendar
类表示日期和时间。但是你想要一个没有时间的日期值。
您正在调用由具有特定目的的特定接口compareTo
定义的Comparable
方法。此方法旨在返回整数,而您希望布尔结果为" isBefore"或" isAfter"。
此外,麻烦的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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance 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));