如何根据日期对“MMM YYYY”日期字符串进行排序? [复制]

Posted

技术标签:

【中文标题】如何根据日期对“MMM YYYY”日期字符串进行排序? [复制]【英文标题】:How to sort 'MMM YYYY' date string according to date? [duplicate] 【发布时间】:2021-11-29 04:56:57 【问题描述】:

我正在尝试根据 Java (android) 中的日期对“MMM YYYY”字符串进行排序。

例如:

Input:
---------
Sep 2019
Oct 2018
Nov 2019
Oct 2021
Nov 2011

Output:
---------
Nov 2011
Oct 2018
Sep 2019
Nov 2019
Oct 2021

【问题讨论】:

那么您想按时间顺序对它们进行排序吗?如果是这样,请说出来。您的示例数据并不明显。 不要将您的月份作为字符串保留在您的列表中。就像您不会将数字放入字符串数组一样。使用正确的数据类型。在这种情况下,保留YearMonth 对象的列表。按自然顺序对它们进行排序。如果您需要提供字符串输出,请将每个 YearMonth 对象格式化为您的 MMM yyyy 格式(或接收者喜欢的格式)的字符串。 【参考方案1】:

创建给定字符串的Stream,将Stream的每个字符串解析为YearMonth,对Stream进行排序,将每个YearMonth元素映射为原始格式,最后收集Stream到一个集合中。

演示:

import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Locale;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Main 
    public static void main(String args[])
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMM uuuu", Locale.ENGLISH);
        List<String> sorted = Stream.of(
                "Sep 2019",
                "Oct 2018",
                "Nov 2019",
                "Oct 2021",
                "Nov 2011"
        )
        .map(s -> YearMonth.parse(s, dtf))
        .sorted()
        .map(ym -> dtf.format(ym))
        .collect(Collectors.toList());
                
        // Display the list
        sorted.forEach(System.out::println);
    

输出:

Nov 2011
Oct 2018
Sep 2019
Nov 2019
Oct 2021

ONLINE DEMO

通过 Trail: Date Time 了解有关 modern Date-Time API* 的更多信息。


* 如果您正在为一个 Android 项目工作,并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaring。请注意,Android 8.0 Oreo 已经提供了support for java.time

【讨论】:

【参考方案2】:

您的问题不清楚。我假设您的目标是按时间顺序对它们进行排序。

YearMonth

    将每个值解析为YearMonth。 将那些YearMonth对象收集到NavigableSet中。 迭代该集合,生成所需的输出。

【讨论】:

以上是关于如何根据日期对“MMM YYYY”日期字符串进行排序? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

dd/MMM/yyyy:hh:mm:ss +0800日期格式的转化

Datepicker 使用格式 ''$filter('date')($scope.dt.datetime, 'd MMM, yyyy');' 时显示今天的日期该怎么办?使用 Angular js 日期

Netsuite 中的 FTL 日期格式

如何通过 NSDate 输入对表格视图进行排序(格式化为 MMM yyyy)

如何更改日期范围选择器的日期格式?

如何根据日期对SQL Server中的多个列进行排序