SimpleDateFormat 中的可选部分
我正在读取可能带有或不带有时区调整的日期字符串:yyyyMMddHHmmssz
或 yyyyMMddHHmmss
.当字符串缺少区域时,我会将其视为 GMT.我没有看到在 SimpleDateFormat
中创建可选部分的任何方法,但也许我遗漏了一些东西.有没有办法用 SimpleDateFormat
来做到这一点,还是我应该写一个新的具体 DateFormat
来处理这个?
I'm reading in date strings that could be with or without a time zone adjustment: yyyyMMddHHmmssz
or yyyyMMddHHmmss
. When a string is missing a zone, I'll treat it as GMT. I'm not seeing any way to create optional sections in a SimpleDateFormat
, but maybe I'm missing something. Is there a way to do this with a SimpleDateFormat
, or should I just write a new concrete DateFormat
to handle this?
推荐答案
我会创建两个 SimpleDateFormat,一个有时区,一个没有.您可以查看 String 的长度来确定使用哪一个.
I would create two SimpleDateFormat, one with a time zone and one without. You can look at the length of the String to determine which one to use.
听起来您需要一个代表两个不同 SDF 的 DateFormat.
Sounds like you need a DateFormat which delegates to two different SDF.
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"));
相关文章