如何根据日期对“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 日期