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 ?
Réponses
Trop de publicités?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"));
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();
Johan Sjöberg
Points
20759