簡體   English   中英

在joda時間API中比較兩個日期的問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM