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;
}
}
}
Vergleichen Sie die Datumsformate, oder vergleichen Sie zwei Daten in heterogenen Formaten? –
Aber ich muss String vergleichen, Vergleichen von Datumsformat mit String –
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. –