[英]issue with comparing two dates in joda time API
我有一个下面的程序来比较两个日期。
我得到的时间戳是date1和currentTimestamp,在这里我只需要比较日期而不是时间value。但是下面的程序总是返回-1。(value)
timestamp date1 = "2017-01-20 14:51:30.091" // i get this from service call in this format
SimpleDateFormat dateFormat = new SimpleDateFormat(DEFAULT_TIMESTAMP_FORMAT);
Calendar calendar = Calendar.getInstance();
String formattedDate = dateFormat.format(calendar.getTime());
java.util.Date currentDate = dateFormat.parse(formattedDate);
java.sql.Timestamp currentTimestamp = new java.sql.Timestamp(currentDate.getTime());
int value = DateTimeComparator.getDateOnlyInstance().compare(date1 , currentTimestamp );
如何只比较日期,而不考虑时间。 请帮我。
更新:
我更改为以下代码
timestamp date1 = "2017-01-20 14:51:30.091" // i get this from service call in this format
LocalDate localDate = new LocalDate();
int value = DateTimeComparator.getDateOnlyInstance().compare(date1 , localDate );
这给了我一个错误,说“ java.lang.IllegalArgumentException:未找到类型为org.joda.time.LocalDate的即时转换器”
要比较joda
没有时间的DateTime
,您有2个选项:
DateTime
转换为LocalDate
。 DateTimeComparator.getDateOnlyInstance
例如:
@Test
public void compareJodaTime() {
DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.SSS");
String today = "2017-01-20 14:51:30.091";
String tomorrow = "2017-01-21 14:51:30.091";
DateTime now = DateTime.now();
Assert.assertThat(now.toLocalDate().compareTo(DateTime.parse(today, dateTimeFormatter).toLocalDate()), Matchers.is(0));
Assert.assertThat(now.toLocalDate().compareTo(DateTime.parse(tomorrow, dateTimeFormatter).toLocalDate()), Matchers.is(-1));
Assert.assertThat(now.toLocalDate().isEqual(DateTime.parse(today, dateTimeFormatter).toLocalDate()), Matchers.is(true));
Assert.assertThat(now.toLocalDate().isBefore(DateTime.parse(tomorrow, dateTimeFormatter).toLocalDate()), Matchers.is(true));
Assert.assertThat(DateTimeComparator.getDateOnlyInstance().compare(now, DateTime.parse(today, dateTimeFormatter)), Matchers.is(0));
Assert.assertThat(DateTimeComparator.getDateOnlyInstance().compare(now, DateTime.parse(tomorrow, dateTimeFormatter)), Matchers.is(-1));
}
这不是乔达的解决方案...
使用:Apache库'commons-lang3-xxjar'(DateUtils)
@Test
public void testCompare() {
Date current = new Date();
Date previous = DateUtils.addHours(DateUtils.addDays(new Date(), -1),5);
assertEquals(1,DateUtils.truncatedCompareTo(current,previous,Calendar.DATE));
assertEquals(0,DateUtils.truncatedCompareTo(current,current,Calendar.DATE));
assertEquals(-1,DateUtils.truncatedCompareTo(previous,current,Calendar.DATE));
}
您可以使用JodaTime尝试以下代码: DateTime date1 = DateTime.parse("2017-01-20 14:51:30.091", DateTimeFormat.forPattern("YYYY-MM-dd HH:mm:ss.SSS")); DateTime now = new DateTime(); int value = DateTimeComparator.getDateOnlyInstance().compare(date1 , now);
DateTime date1 = DateTime.parse("2017-01-20 14:51:30.091", DateTimeFormat.forPattern("YYYY-MM-dd HH:mm:ss.SSS")); DateTime now = new DateTime(); int value = DateTimeComparator.getDateOnlyInstance().compare(date1 , now);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.