java使用正则表达式提取和重新格式化时间戳是唯一的方法吗?
我需要阅读时间戳列表,并按“最早的”和“最新的”顺序进行排序。但在对它们进行排序之前,我需要先重新格式化它们。这些时间戳的格式如下:
mm:hh-PM/AM-dd-Month(例如6月)yyyy
例如:
- 2016年6月1日下午3:40
- 2016年6月11日上午11:40
我正在使用正则表达式提取每个时间戳,并将其重新格式化为Java可以识别的格式,例如:年月日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认可的时间戳格式,但我没有找到它李>
# 1 楼答案
可以使用SimpleDataFormat将日期字符串解析为Java日期
之后,您可以使用comparator对日期对象进行排序
# 2 楼答案
我是用解析器实现的
如果有多个空格,可以在解析之前清除输入
对于多个日期,请移动格式化程序
# 3 楼答案
你可以这样做:
将字符串日期转换为
Date
,然后将其添加到列表(集合)并对其进行排序查看工作示例here