SimpleDateFormat中的可选零件 [英] Optional parts in SimpleDateFormat
问题描述
我正在阅读可能有或没有时区调整的日期字符串: yyyyMMddHHmmssz
或 yyyyMMddHHmsms
。当一个字符串丢失一个区域时,我将其视为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,一个有时区,一个没有。您可以查看字符串的长度来确定要使用的字符串的长度。
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.
听起来像您需要一个DateFormat,代表到两个不同的SDF。
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"));
这篇关于SimpleDateFormat中的可选零件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!