2017-01-16 5 views
2

Ich bekomme Eingabe als zwei Arten.Wie zu String Date-Formate in Java zu vergleichen?

1.String date1 = "07/01/2017"; 
2.String date2 = ""2017-01-12 00:00:00.0"; 

Wie zwei Datumsformate zu vergleichen. Ich möchte eine Funktion ausführen, wenn ich Format als date1 bekomme. Wenn ich date2 Format dann eine andere Funktionalität bekomme. So vergleichen Sie zwei Datumsformate mithilfe von Zeichenfolgen

Ex:

if(date1.equals('dd/mm/yyyy')){ 

    //perform functionality 

    } 
+2

Vergleichen Sie die Datumsformate, oder vergleichen Sie zwei Daten in heterogenen Formaten? –

+0

Aber ich muss String vergleichen, Vergleichen von Datumsformat mit String –

+0

Was meinst du "vergleichen" DateFormat ""? Sie sind nicht von Natur aus vergleichbar, genauso wie ein Löffel weder von Natur aus größer noch kleiner als ein anderer ist. –

Antwort

2

Verwendung RegEx:

String date1 = "07/01/2017"; 
    if (date1.matches("^([0-9]{1,2}/){2}[0-9]{2,4}$")) { 
     System.out.println("Date in MM/dd/yyyy format"); 
    } else if (date1.matches("^[0-9]{2,4}(-[0-9]{1,2}){2}\\s[0-9]{1,2}(:[0-9]{1,2}){2}\\.[0-9]{1,}$")) { 
     System.out.println("Date in yyyy-MM-dd hh:mm:ss.t format"); 
    } else { 
     System.err.println("Unsupported Date format."); 
    } 
0

Die Lösung mit RegEx ist gut, aber Sie können auch auf diese Weise tun:

Die Der erste Parameter ist Ihre String-Darstellung des Datums. Der nächste Parameter ist var arg. So können Sie beliebig viele Datumsformate übergeben. Es wird versuchen, zu analysieren und wenn der Erfolg dann das richtige Format zurückgibt.

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Objects; 
import java.util.Optional; 
import java.util.stream.Stream; 

public class Test { 
    public static void main(String[] args) { 
     Optional<String> format = test("07-01-2017", "dd/mm/yyyy", "dd-mm-yyyy"); 
     if (format.isPresent()) 
      System.out.println(format.get()); 
    } 

    public static Optional<String> test(String date, String... formats) { 
     return Stream.of(formats) 
       .map(format -> new Pair<>(new SimpleDateFormat(format), format)) 
       .map(p -> { 
        try { 
         p._1.parse(date); 
         return p._2; 
        } catch (ParseException e) { 
         return null; 
        } 
       }) 
       .filter(Objects::nonNull) 
       .findFirst(); 
    } 

    public static class Pair<F, S> { 
     public final F _1; 
     public final S _2; 

     public Pair(F _1, S _2) { 
      this._1 = _1; 
      this._2 = _2; 
     } 
    } 
} 
0

Ich denke, wir können zwei Datumsformate deklarieren und die Daten analysieren und die beiden Date-Instanzen vergleichen. Hier ist Beispielcode:

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class DateCompare { 

    private static final String FORMAT1 = "MM/dd/yyyy"; 
    private static final String FORMAT2 = "yyyy-MM-dd hh:mm:ss"; 

    private Date parseDate(String format1, String format2, String dateStr) throws ParseException { 
     boolean isException = false; 
     Date date = null; 
     try { 
      date = parseDate(format1, dateStr); 
     } catch (ParseException e) { 
      isException = true; 
     } 
     if (isException) { 
      date = parseDate(format2, dateStr); 
     } 
     return date; 
    } 

    private Date parseDate(String format1, String dateStr) throws ParseException { 
     SimpleDateFormat dateFormat = new SimpleDateFormat(format1); 
     return dateFormat.parse(dateStr); 
    } 

    public static void main(String[] args) throws ParseException { 
     DateCompare compare = new DateCompare(); 
     Date date1 = compare.parseDate(FORMAT1, FORMAT2,"07/01/2017"); 
     Date date2 = compare.parseDate(FORMAT1, FORMAT2, "2017-07-01 00:00:00"); 

     if (date1.compareTo(date2) == 0) { 
      System.out.println("Dates are equal."); 
     } else { 
      System.out.println("Dates are not equal."); 
     } 
    } 
} 
+0

Diese Antwort vermisst den Punkt: Im OP wissen wir nicht, ob die Datumszeichenfolge "FORMAT1" oder "FORMAT2" entspricht. Ihre Antwort führt zu nicht abgefangenen 'ParseExceptions'. –

+0

@SME_Dev Ich habe versucht, Ihren Punkt anzusprechen. Bitte prüfe. Danke für die Rückmeldung. – YoungHobbit

+0

Es ist auch eine praktikable Lösung, aber es ist Geschmackssache. Im Allgemeinen verwende ich keine Ausnahmen im normalen Logikfluss, nur aus Sicht der Leistung und der Überlastung. – Vadim