49 votes

Pièces optionnelles dans SimpleDateFormat

Je lis des chaînes de date qui peuvent être avec ou sans ajustement de fuseau horaire : yyyyMMddHHmmssz ou yyyyMMddHHmmss . Lorsqu'une chaîne manque une zone, je la traiterai comme GMT. Je ne vois aucun moyen de créer des sections facultatives dans un SimpleDateFormat , mais il me manque peut-être quelque chose. Existe-t-il un moyen de le faire avec un SimpleDateFormat , ou devrais-je simplement écrire un nouveau DateFormat concret pour gérer cela ?

21voto

Peter Lawrey Points 229686

Je créerais deux SimpleDateFormat, un avec un fuseau horaire et un sans. Vous pouvez regarder la longueur de la chaîne pour déterminer laquelle utiliser.


On dirait que vous avez besoin d'un DateFormat qui délègue à deux SDF différents.

 DateFormat df = new DateFormat() {
    static final String FORMAT1 = "yyyyMMddHHmmss";
    static final String FORMAT2 = "yyyyMMddHHmmssz";
    final SimpleDateFormat sdf1 = new SimpleDateFormat(FORMAT1);
    final SimpleDateFormat sdf2 = new SimpleDateFormat(FORMAT2);
    @Override
    public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) {
        throw new UnsupportedOperationException();
    }

    @Override
    public Date parse(String source, ParsePosition pos) {
        if (source.length() - pos.getIndex() == FORMAT1.length())
            return sdf1.parse(source, pos);
        return sdf2.parse(source, pos);
    }
};
System.out.println(df.parse("20110102030405"));
System.out.println(df.parse("20110102030405PST"));

3voto

hgh Points 581

Si vous pouvez utiliser Joda Datetime, il prend en charge les parties facultatives dans le formateur, par exemple, "aaaa-MM-jj [hh:mm:ss]"

 private DateTimeFormatter fmt = new DateTimeFormatterBuilder()
.append(DateTimeFormat.forPattern("yyyy-MM-dd"))                                            
.appendOptional(
    new DateTimeFormatterBuilder()
    .appendLiteral(' ')
    .append(DateTimeFormat.forPattern("HH:mm:ss"))
    .toParser()
.toFormatter();

2voto

Johan Sjöberg Points 20759

Je voudrais boucle sur la liste des potentiels DateFormat des objets en utilisant un try-catch opération pour briser la boucle sur la première analyse syntaxique réussie.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X