Java 为什么daes date1.compareTO(date2)==0,即使日期相同,也不能满足我的需求?
我正在编写一个提醒应用程序,它应该有一个hashmap(Java 为什么daes date1.compareTO(date2)==0,即使日期相同,也不能满足我的需求?,java,android,date,Java,Android,Date,我正在编写一个提醒应用程序,它应该有一个hashmap(黎巴嫩,在下面的代码片段中),包含不同的日期作为键,假日名称作为值。这是我的日历: SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy"); Calendar current = Calendar.getInstance(); Calendar cal = Calendar.getInstance(); cal.set(pickerDate.getYear(),
黎巴嫩
,在下面的代码片段中),包含不同的日期作为键,假日名称作为值。这是我的日历:
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");
Calendar current = Calendar.getInstance();
Calendar cal = Calendar.getInstance();
cal.set(pickerDate.getYear(),
pickerDate.getMonth(),
pickerDate.getDayOfMonth(),
pickerTime.getCurrentHour(),
pickerTime.getCurrentMinute(),
0
);
Date date12_1 = format.parse("1/1/2017");
Lebanon.put(date12_1, "New Year");
if (cal.getTime().compareTo(date12_1) > 0) {
info.setText(cal.getTime() + "BIGGER THAN " + date12_1);
} else if (cal.getTime().compareTo(date12_1) == 0) {
info.setText(cal.getTime() + "EQUAL TO " + date12_1);
} else if (cal.getTime().compareTo(date12_1) < 0) {
info.setText(cal.getTime() + "SMALLER THAN " + date12_1);
}
对于全天活动,Java8+中的最佳表示形式是。
Calendar
由long
值支持,因此在您的情况下很容易出错<另一方面,code>LocalDate实现了equals()
和hashCode()
以完全适合您的用例
如果你必须坚持Java7而不是一个选项,考虑在从采摘者填写日历之前清除日历:< /P>
@Test
public void testCalendar() {
Calendar cal = Calendar.getInstance();
cal.setTime(new Date(0));
int year = cal.get(Calendar.YEAR);
int day = cal.get(Calendar.DAY_OF_MONTH);
int month = cal.get(Calendar.MONTH);
cal.set(Calendar.YEAR, 2016);
cal.set(Calendar.MONTH, 3);
cal.set(Calendar.DAY_OF_MONTH, 27);
assertEquals(cal.get(Calendar.MILLISECOND), 0);
}
甚至在Apache
commons-lang3
中,在设置时间之后,在cal
object中设置毫秒数
cal.set(pickerDate.getYear(),
pickerDate.getMonth(),
pickerDate.getDayOfMonth(),
pickerTime.getCurrentHour(),
pickerTime.getCurrentMinute(),
0
);
cal.set(Calendar.MILLISECOND,0);
如果它不起作用,获得正确结果的最佳方法是先创建Calendar对象,然后创建getDate,这样做更简单,并为您提供更多的更改选项。将您的date12\u 1
更改为日历对象
Date date12_1 = format.parse("1/1/2017"); //change this line
到
Calendar.getInstance()
还设置从系统时钟检索的毫秒数
这意味着毫秒几乎总是大于0。我自己测试过,时间戳得到了不同的值:
System.out.println(date12_1.getTime());
System.out.println(cal.getTimeInMillis());
您还需要将毫秒设置为0:
- 您可以使用
setTimeInMillis(0)
- 或者您可以使用
cal.set(Calendar.millis秒,0)将毫秒字段设置为0代码>
setTime(新日期(0))清除日历
和2.DateUtils.isSameDay
我的问题是你说的毫秒数…谢谢你,现在它工作了。我如何将它们设置为0?@MC emperor在设置时间之前,你可以使用setTimeInMillis(0)
设置时间(cal.set(pickerDate.getYear(),…
)不可以。只有当系统时钟在对Calendar.getInstance()
Calendar cal2 = Calendar.getInstance();
cal2.set(Calendar.YEAR, 2014);
cal2.set(Calendar.DAY_OF_YEAR, 1);
cal2.set(Calendar.MILLISECOND,0);
Date date12_1 = cal2.getTime();
System.out.println(date12_1.getTime());
System.out.println(cal.getTimeInMillis());