SimpleDateFormat中的可选零件 [英] Optional parts in SimpleDateFormat

查看:129
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆