时间和/或日期排序

时间:2018-08-08 17:12:14

标签: java sorting

我试图弄清楚如何使用java和selenium验证时间和/或日期的排序。这是我的情况...所以,如果我今天收到电子邮件,我的收件箱会显示收到邮件的时间。但是,如果我昨天收到电子邮件,则“收件箱”将显示昨天的日期。我试图验证以降序排列的,带有时间的电子邮件会首先出现,然后是带有日期的电子邮件。

这是我的代码,如果只有日期,它会起作用。有人可以帮我弄清楚如何验证时间吗?

  protected void validateDateDescendingOrder(String className) {
    // create a list
    List<WebElement> messageElements = driver.findElements(By.cssSelector("div.scrollable-panel div." + className));
    List<String> messageList = new ArrayList<String>();
    for (WebElement element : messageElements) {
      messageList.add(element.getText());
    }

    // create a new list and sort
    List<String> sortedmessageList = new ArrayList<String>();
    sortedmessageList.addAll(messageList);
    Collections.sort(sortedmessageList, new Comparator<String>() {
      DateFormat f = new SimpleDateFormat("MM/dd/yy");

      @Override
      public int compare(String o1, String o2) {
        try {
          return f.parse(o2).compareTo(f.parse(o1));
        } catch (ParseException e) {
          throw new IllegalArgumentException(e);
        }
      }
    });

    // compare the original list order with the sorted list to make sure they match
    assertEquals(sortedmessageList, messageList);
  }

3 个答案:

答案 0 :(得分:1)

希望这对使用Java 8的您有帮助

List<String> date = Arrays.asList("2015-11-09", "2015-11-11", "2015-11-08", "2015-11-08");
List<LocalDate> convetedSortedDate = date.stream().map(LocalDate::parse).sorted().collect(Collectors.toList());

//或

 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy '@'hh:mm a");
    Collections.sort(datestring, (s1, s2) -> LocalDateTime.parse(s1, formatter).
            compareTo(LocalDateTime.parse(s2, formatter)));

答案 1 :(得分:0)

  1. 更改DateFormat f =新的SimpleDateFormat(“ MM / dd / yy”);格式还包括时间
  2. 如果在“解析”部分中引发了异常,请在Date.Now和Time之间进行串联;否则,请执行以下操作:然后再次进行解析。 (也许在这种情况下,日期是0/0/0之类的,您需要确定是否在这种情况下)
  3. 进行排序

答案 2 :(得分:0)

您所缺少的只是解析器。有一个非常有用的库Apache-lang,其中包含许多有趣的帮助程序方法。

就我而言,我也在比较日期,但是日期字符串有几种不同的格式。使用上述库,我可以执行以下操作:

import org.apache.commons.lang3.time.DateUtils;

private Date magicParseDate(final String date) {
try {
    return DateUtils.parseDate(date, "yyyyMMdd-S", "yyyy-MM-dd HH:mm:ss", "MM/dd/yyyy HH:mm:ss z");
} catch (ParseException ignore) {
    // empty values
    return new Date(0);
}
}

然后在您的比较函数中只需调用magicParseDate()