java - 比较列表中字符串的日期

原文 标签 java sorting date-parsing date-comparison

我有问题继续。我有一个列表,每个位置都包含一个字符串(在短语末尾有一个日期)

例子:

I am new here 20/8/2019 

我想以这种方式对列表进行排序:
在位置零我想要包含最早日期的短语和以下位置的日期将是最近的。

我尝试使用 SimpleDateFormat 和 Date,但我不知道该怎么做。
String variable, variable2, c;
int d = 0;
for(int i = 0; i < lista.size(); i++) {
    for(int j = 1; j <lista.size(); j++) {
        variable = lista.get(i);
        variable2 = lista.get(j);
        c = compareDates(variable, variable2);
        lista.add(d,c);
        d++;
    }
}

private static Date compareDates(String variable, String variable2) throws ParseException {
    SimpleDateFormat formateador = new SimpleDateFormat("dd/MM/yyyy");
    String var = formateador.format(variable);
    String var2 = formateador.format(variable2);
    if (var.before(var2)) {
        return var;
    } else {
        if (var2.before(var1)) {

        } else {

        }
        return null;
    }
}

线程“main”中的异常 java.lang.Error: Unresolved 编译问题:
类型不匹配:无法从日期转换为字符串
at Ejercicio.ClaseMain.leerDes(ClaseMain.java:124)

Line 124: c = compareDates(variable, variable2);



视觉示例:列表中的每个位置都有一个带日期的短语:

enter image description here

问题是,我读了一个 .txt 文件,其中有几行。
文件内容:

Sevilla reserves himself to Apoel and wins without brilliance; sport Julen Lopetegui revolutionized the eleven with the aim of giving rest to the regulars, which did not prevent his team from adding his second triumph of the competition sportyou 10/10/2019

A painting by Banksy of the British Parliament occupied by chimpanzees, sold >for 11 million euros culture An oil of artist Banksy representing the British House of Commons full of chimpanzees was topped on Thursday at an auction in London for 9.8 million pounds (11 million euros) 10/2019



我用了一段时间读取文件行并将每一行保存在列表中的每个位置,我想对列表进行排序。旧日期 ---> 最近日期。

最佳答案

请不要使用旧的 Date 库,而是使用 java.time API,因此如果您使用的是 Java 8,您的解决方案可以是:

String[] strs = {"20/10/2019", "5/2/2019", "12/12/2019",
        "1/8/2019", "25/12/2019", "2/1/2019", "6/9/2019"};
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d/M/uuuu");
List<LocalDate> collect = Stream.of(strs)
        .map(s -> LocalDate.parse(s, formatter))  // convert your strings to dates
        .sorted() // sort the dates
        .collect(Collectors.toList()); // collect the result in a collection

输出
[2019-01-02, 2019-02-05, 2019-08-01, 2019-09-06, 2019-10-20, 2019-12-12, 2019-12-25]

关于java - 比较列表中字符串的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58779289/

相关文章:

java - java linux centos DISPLAY环境变量

mysql - 如何通过Alpha集(a-z,a-z,a-z ...)制作简单的MySQL Order

C# 按枚举排序列表

c# - 以各种格式呈现时解析日期的推荐方式

java - Java:找到当前有效的JAR

java - WebClient(spring-boot-starter-webflux)将请求发送到错误的URL

java - 如何在Stringbuffer中读取具有html表之类的数据的.xls文件?

c++ - 带有额外参数 'invalid operator <'的C++ STL排序

java - DateTimeParseException - 无法在索引 0 处解析

java - 日历取件日期格式问题