我需要阅读时间戳列表,并按“最旧”和“最新”顺序对其进行排序。但在我对它们进行排序之前,我需要先重新格式化它们。这些时间戳采用以下格式:
mm:hh PM / AM dd Month(例如Jun)yyyy ,
例如:
我正在使用Regex将每个时间戳提取并重新格式化为Java将识别的格式,例如 dd月(例如Jun)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
。
我的问题是:
答案 0 :(得分:4)
您可以使用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]
答案 1 :(得分:1)
我使用解析器这样做了。
LocalDateTime ldt = LocalDateTime.parse("11:40 AM 11 Jun 2016", DateTimeFormatter.ofPattern("h:m a d MMM yyyy"));
System.out.println(ldt);
如果您有多个空格,则可以在解析之前清除输入
String inputDate = "11:40 AM 11 Jun 2016";
inputDate = inputDate.replaceAll("[ ]+", " ");
对于多个日期,请移动格式化程序。
//BTW, it is thread-safe.
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("h:m a d MMM yyyy");
//---
LocalDateTime ldt = LocalDateTime.parse(input, FORMATTER);
答案 2 :(得分:1)
您可以使用SimpleDateFormat
将日期字符串解析为Java Date String date = "3:40 PM 1 Jun 2016";
SimpleDateFormat formatter = new SimpleDateFormat("hh:mm a dd MMM yyyy");
Date startDate = formatter.parse(date);
System.out.println(startDate);
在此之后,您可以使用比较器对日期对象进行排序。
答案 3 :(得分:1)
您可以这样做:
将字符串日期转换为Date
,然后将它们添加到列表(集合)中并对其进行排序。
查看工作示例here !!
// Your dates to sort
String dates[] = {"3:40 PM 1 Jun 2016", "11:40 AM 11 Jun 2016"};
List<Date> lst = new ArrayList<>();
// Your date format
DateFormat format = new SimpleDateFormat("hh:mm a dd MMM yyyy");
for(String str : dates){
//creating the collection of your dates converted to java dates
lst.add(format.parse(str));
}
//sorting the dates
Collections.sort(lst);
//converting the dates into new format (if required)
DateFormat newFormat = new SimpleDateFormat("dd MMM yyyy HH:mm");
for(Date date : lst){
System.out.println(newFormat.format(date));
}