Maison >Java >javaDidacticiel >Java peut-il analyser les dates de manière aussi flexible que le dateutil de Python ?

Java peut-il analyser les dates de manière aussi flexible que le dateutil de Python ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-16 13:14:18512parcourir

Can Java Parse Dates as Flexibly as Python's dateutil?

Analyser n'importe quelle date en Java

Question :

Malgré ses éloges, Joda time nécessite les utilisateurs doivent spécifier manuellement les formats de date avant l’analyse. Existe-t-il une bibliothèque Java capable d'analyser un large éventail de formats de date sans effort, similaire à python-dateutil ?

Réponse :

Alors que la bibliothèque dateutil de Python excelle dans les dates flexibles l'analyse syntaxique, obtenir des résultats comparables en Java nécessite une approche pragmatique :

1. Correspondance d'expressions régulières :

Les expressions régulières constituent un moyen puissant d'identifier les modèles de format de date. En mappant les formats de date courants avec leurs expressions régulières correspondantes, il est possible de déterminer le format correct pour une chaîne de date donnée.

private static final Map<String, String> DATE_FORMAT_REGEXPS = new HashMap<>() {{
    put("^\d{8}$", "yyyyMMdd");
    put("^\d{1,2}-\d{1,2}-\d{4}$", "dd-MM-yyyy");
    put("^\d{4}-\d{1,2}-\d{1,2}$", "yyyy-MM-dd");
    // … (other format patterns)
}};

public static String determineDateFormat(String dateString) {
    for (String regexp : DATE_FORMAT_REGEXPS.keySet()) {
        if (dateString.toLowerCase().matches(regexp)) {
            return DATE_FORMAT_REGEXPS.get(regexp);
        }
    }
    return null; // Unknown format.
}

2. Brute Forcing :

Si le format de date ne peut pas être déterminé via regex, la force brute peut être utilisée en dernier recours. Parcourez une collection de formats de date courants et essayez d'analyser la chaîne de date avec chacun d'eux.

public static Date parseDate(String dateString) {
    String dateFormat = determineDateFormat(dateString);
    if (dateFormat != null) {
        return new SimpleDateFormat(dateFormat).parse(dateString);
    }
    
    // Brute force using common formats
    for (String format : COMMON_DATE_FORMATS) {
        try {
            return new SimpleDateFormat(format).parse(dateString);
        } catch (ParseException e) {
            // Ignore parsing error
        }
    }
    
    throw new IllegalArgumentException("Invalid date format: " + dateString);
}

En combinant la correspondance d'expressions régulières et la force brute, il est possible d'analyser un large éventail de formats de date en Java, bien que avec un peu plus d'effort que la bibliothèque dateutil de Python.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn