2016-07-12 7 views
0

Ich muss eine Liste von Zeitstempeln lesen und sortieren sie von "älteste" und "neueste" um. Aber bevor ich sie sortieren kann, muss ich sie zuerst neu formatieren. Diese Zeitstempel sind in folgendem Format:Verwenden von Regex zum Extrahieren und Neuformatieren von Timestamp der einzige Weg?

mm: hh PM/AM dd Monat (egJun) yyyy,

Zum Beispiel:

  • 3:40 PM 1 Jun 2016
  • 11:40 11 Jun 2016

Ich verwende Regex, um jeden Zeitstempel in ein Format zu extrahieren und neu zu formatieren, das Java erkennt, z. dd Monat (. Z Juni) yyyy hh: mm

Was ich habe, wie folgend getan ist:

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"); 
     } 
    } 
} 

Für die Eingabe 3:40 PM 1 Jun 2016, ich habe 1 Jun 2016 15:40.

Meine Frage ist:

  • Mein Ansatz ist der beste Weg, mein Ziel im Hinblick auf die Klarheit und Effizienz zu erreichen? Ich hatte gehofft, dass es eine Methode geben würde, die sofort in das von Java erkannte Timestamp-Format umwandeln könnte, aber ich habe es nicht gefunden.
+3

Werfen Sie einen Blick auf [ 'SimpleDateFormat'] (https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html)? –

+0

@RC., Danke werden Sie tun –

+2

Sie können das Datum als Nummer nach dem Parsen sie sortieren. Sie müssen sie nicht als Strings sortieren. –

Antwort

1

Sie können Ihr Datum String Java Datum parsen von Simple mit

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); 

Danach Sie Datum Objekte mit Komparator sortieren.

+0

danke. abgestimmt. Dies wird die Antwort auf meine Frage sein. –

+0

Froh, dass Sie geholfen haben, Spaß am Programmieren :) – Sanjeev

1

Ich ging diesen Weg mit Parser.

LocalDateTime ldt = LocalDateTime.parse("11:40 AM 11 Jun 2016", DateTimeFormatter.ofPattern("h:m a d MMM yyyy")); 
    System.out.println(ldt); 

Wenn Sie mehrere Leerräume haben, können Sie Eingabe löschen, bevor

String inputDate = "11:40 AM 11 Jun 2016"; 
inputDate = inputDate.replaceAll("[ ]+", " "); 

Für mehrere Daten, verschieben Formatierer Parsen.

//BTW, it is thread-safe. 
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("h:m a d MMM yyyy"); 


//--- 
LocalDateTime ldt = LocalDateTime.parse(input, FORMATTER); 
+1

habe mich dafür entschieden, mir beizubringen, wie man alle Raumzeichen herausfiltert. Danke, –

+0

Willkommen, es ist ein einfacher Weg, aber für komplexere Wege sollten Sie Tabs und andere Zeichen loswerden, die wie Leerzeichen aussehen. –

4

können Sie den Stream-API verwenden, um zu analysieren und sortieren mehrere Daten

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); 

druckt

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

haben mich dafür gewählt, mir Stream API zu zeigen. Danke –

+1

@YuZhang von Java 6+ Sie wollen die neue JSR-310 API für die Analyse und Verarbeitung verwenden Datum Zeit –

1

Sie können so etwas tun:

Convert String Daten Date und fügen Sie dann sie zu einer Liste (Sammlung) und sortieren sie.

Überprüfen Sie das Arbeitsbeispiel 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)); 
    } 
+0

danke, abgestimmt –