gpt4 book ai didi

java - 使用正则表达式提取和重新格式化时间戳是唯一的方法吗?

转载 作者:行者123 更新时间:2023-12-01 07:20:49 25 4
gpt4 key购买 nike

我需要读取时间戳列表并按“最旧”“最新”顺序对它们进行排序。但在对它们进行排序之前,我需要先重新格式化它们。这些时间戳采用以下格式:

mm:hh PM/AM dd 月份(例如 Jun)yyyy,

例如:

  • 2016 年 6 月 1 日下午 3:40
  • 2016 年 6 月 11 日上午 11:40

我正在使用正则表达式提取每个时间戳并将其重新格式化为Java可以识别的格式,例如dd 月份(例如 6 月)yyyy hh:mm

我所做的如下:

package regularExpressionDate;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class regularExpressionDate {

public static void main(String[] args) {
String pattern = "^(\\d{1,2}):(\\d{1,2})\\s(PM|AM)\\s(\\d{1,2})\\s(\\w{3})\\s(\\d{4})$";
String date1 = "3:40 PM 1 Jun 2016";
String newDate1;
int hour;

Pattern r = Pattern.compile(pattern);
Matcher m1 = r.matcher(date1);

if(m1.find()) {
hour = Integer.parseInt(m1.group(1));
if(m1.group(3).equals("PM")) {
hour+=12;
System.out.println(m1.group(3));
}
newDate1 = (m1.group(4) + " " + m1.group(5) + " " + m1.group(6) + " " + hour + ":" + m1.group(2));
System.out.println(newDate1);
}
else {
System.out.println("No match");
}
}
}

对于输入3:40 PM 1 Jun 2016,我得到1 Jun 2016 15:40

我的问题是:

  • 就清晰度和效率而言,我的方法是实现目标的最佳方式吗?我希望有一个方法可以立即转换为Java识别的时间戳格式,但我没有找到。

最佳答案

您可以使用 Stream API 对多个日期进行解析和排序

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("h:mm a d MMM yyyy");
List<LocalDateTime> dates =
Stream.of("3:40 PM 1 Jun 2016", "11:40 AM 11 Jun 2016")
.map(text -> LocalDateTime.parse(text, formatter))
.sorted()
.collect(Collectors.toList());
System.out.println(dates);

打印

[2016-06-01T15:40, 2016-06-11T11:40]

关于java - 使用正则表达式提取和重新格式化时间戳是唯一的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38325922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com