Der sauberste Weg ist wahrscheinlich einen benutzerdefinierter Databinder für mögliche Datumsformate zu registrieren.
import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class CustomDateBinder extends PropertyEditorSupport {
private final List<String> formats;
public CustomDateBinder(List formats) {
List<String> formatList = new ArrayList<String>(formats.size());
for (Object format : formats) {
formatList.add(format.toString()); // Force String values (eg. for GStrings)
}
this.formats = Collections.unmodifiableList(formatList);
}
@Override
public void setAsText(String s) throws IllegalArgumentException {
if (s != null)
for (String format : formats) {
// Need to create the SimpleDateFormat every time, since it's not thead-safe
SimpleDateFormat df = new SimpleDateFormat(format);
try {
setValue(df.parse(s));
return;
} catch (ParseException e) {
// Ignore
}
}
}
}
Sie würden auch eine PropertyEditorRegistrar
import org.springframework.beans.PropertyEditorRegistrar;
import org.springframework.beans.PropertyEditorRegistry;
import grails.util.GrailsConfig;
import java.util.Date;
import java.util.List;
public class CustomEditorRegistrar implements PropertyEditorRegistrar {
public void registerCustomEditors(PropertyEditorRegistry reg) {
reg.registerCustomEditor(Date.class, new CustomDateBinder(GrailsConfig.get("grails.date.formats", List.class)));
}
}
und erstellen Sie eine Frühlings-Bean-Definition in Ihre Grails-app/conf/Frühjahr/resources.groovy implementieren müssen:
beans = {
"customEditorRegistrar"(CustomEditorRegistrar)
}
und schließlich definieren Sie die Datumsformate in Ihrem Grails-App/conf/Config.groovy:
grails.date.formats = ["yyyy-MM-dd HH:mm:ss.SSS ZZZZ", "dd.MM.yyyy HH:mm:ss"]
Sie fragen sich, ob es einen Grund gibt, warum Sie sich dafür entscheiden, dies in Java (wie oben) und nicht in Groovy zu implementieren? Der Code wäre bei Groovy etwas kürzer. –
Ich habe einen ähnlichen Code in Java implementiert, als Groovy früher viel langsamer war als jetzt. Groovy machte einen großen Sprung in dieser Angelegenheit. Ich benutze nur den alten Java-Code aus Faulheit ;-) –
Schönes Stück Code, klassisch von dem, was Sie tun würden. Am saubersten wäre es jedoch, das Gebietsschema zum Abrufen des Formats zu verwenden, anstatt es durch Parsing-Versuche zu iterieren. – Gepsens