0
votes

Chaîne de carte au format différent de la date

J'ai une exigence où je dois mapper ma valeur de la demande entrante en tant que JSON à ce jour dans l'un des formats. Par exemple, dans ma demande, je peux obtenir la chaîne de date comme l'un des formats ci-dessous: xxx

Comment mapper ma valeur de carte entrante à ce jour.


5 commentaires

Vous pouvez utiliser un désérialiseur personnalisé qui, par bruteforce ( essayer de prendre ) essaie d'analyser une date


Quelle bibliothèque Java utilisez-vous? Jackson?


Vous pouvez utiliser une certaine validation de la chaîne de base pour déterminer comment analyser, # 1 doit être facilement reconnaissable à l'aide de longueur () et # 3 en effectuant contient ("m")


Êtes-vous plus intéressé de savoir comment analyser le JSON ou sur la manière de gérer l'analyse après analyse JSON?


Je sens que c'est une mauvaise conception de l'API


5 Réponses :


1
votes

Je suggérerais que vous puissiez utiliser la bibliothèque Jodatime pour implémenter celui-ci

Vous pouvez utiliser plusieurs analyseurs et les ajouter au constructeur à l'aide de DateTimeformatterBuilder.Append la méthode: P>

DateTimeParser[] parsers = { 
        DateTimeFormat.forPattern( "MM/dd/yyyy" ).getParser(),
        DateTimeFormat.forPattern( "MM/dd/yyyy HH:mm:ss" ).getParser(),
        DateTimeFormat.forPattern( "MM/dd/yyyy HH:mm tt" ).getParser() 
};
DateTimeFormatter formatter = new DateTimeFormatterBuilder().append( null, parsers ).toFormatter();

DateTime date1 = formatter.parseDateTime( "03/22/1990" );
DateTime date2 = formatter.parseDateTime( "03/22/1990 10:34:11" );


1 commentaires

Le dernier modèle devrait probablement être "MM / DD / AAAA HH: MM TT"



0
votes

Si vous devez utiliser Java.Time (pour une certaine raison), vous pouvez utiliser quelque chose comme ceux-ci:

private Timestamp parseDateFromString(String dateString) {
    if (StringUtils.isNotBlank(dateString)) {
        try {
            final DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
            final Date date = df.parse(dateString);
            return new Timestamp(date.getTime());
        } catch (ParseException e) {
            log.error("Error parsing string: " + dateString, e);
        }
    }
    return null;
}


0 commentaires

2
votes

Les trois formats que vous avez mentionnés peuvent facilement être identifiés à l'aide de Regex. Par exemple, le motif \ d \ d \ / \ d \ d \ / \ d \ d \ d \ d \ d \ d: \ d \ d: \ d \ d correspondrait à la deuxième chaîne Dans votre exemple, mais pas les deux autres.

Ensuite, vous pouvez utiliser SimpleDateformatter avec le format identifié. E.g. xxx


0 commentaires

0
votes

Donc, vous pouvez utiliser cette solution une solution xxx


0 commentaires

0
votes

Je pense que vous devez résoudre deux problèmes ici:

  1. Comment analyser les dates li>
  2. Comment créer un désérialiseur personnalisé pour votre JSON LI> OL>

    En ce qui concerne le premier problème, vous pouvez utiliser Joda ou Java 8. Je vais coller à Java 8, car le nouveau java.time code> Les bibliothèques peuvent gérer les formats de votre question. p>

    Concernant Json, je suggère d'utiliser la bibliothèque Jackson, car il est extrêmement flexible et vous pouvez créer vos propres désérialiseurs personnalisés avec elle. P>

    Pour importer la bibliothèque Jackson, vous pouvez utiliser le Suite à des dépendances mavennes: p> xxx pré>

    Le désérialiseur par défaut doit être emballé dans un module. Voici quelques échantillons de code de désérialiseur: p> xxx pré>

    alors vous pouvez utiliser ce module simple avec Serializer pour mapper JSON vers des classes: P>

    java.time.format.DateTimeParseException: Text '03/22/1990 12:34:45' could not be parsed, unparsed text found at index 10
    java.time.format.DateTimeParseException: Text '03/22/1990 12:23 AM' could not be parsed, unparsed text found at index 10
    java.time.format.DateTimeParseException: Text '03/22/1990 12:23 AM' could not be parsed at index 16
    DateJson{BookingDate=1990-03-22T00:00, CreatedOn=1990-03-22T12:34:45, ModifiedOn=1990-03-22T00:23}
    


0 commentaires