使Java DateFormat适用于更短的值

时间:2015-12-15 05:48:53

标签: java date-format simpledateformat

我有一个程序,可以在程序开始时一次性地从用户读取Dateformat,例如yyyy/MM/dd HH:mm:ss a

稍后程序会解析文件并使用Dateformat来处理文件中的所有日期。但最近我收到了一个文件,其中99%的日期是2014/09/01 12:00:04 AM所以用户可以输入yyyy/MM/dd HH:mm:ss a

但该文件中的一个日期只是2014/09/01,日期格式yyyy/MM/dd HH:mm:ss a失败。

为什么不能yyyy/MM/dd HH:mm:ss a格式化较短的日期,例如格式yyyy/MM/dd

我想要的是java程序使用格式yyyy/MM/dd HH:mm:ss a来解析以下两个日期:

  1. 2014/09/01 12:00:04 AM
  2. 2014/09/01
  3. 由于

1 个答案:

答案 0 :(得分:1)

您必须使用两种格式。请查看以下示例

DateFormat df = new DateFormat() {
      static final String FORMAT1 = "yyyy/MM/dd HH:mm:ss";
      static final String FORMAT2 = "yyyy/MM/dd";
      final SimpleDateFormat sdf1 = new SimpleDateFormat(FORMAT1);
      final SimpleDateFormat sdf2 = new SimpleDateFormat(FORMAT2);

      @Override
      public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) {
          return null;
      }

      @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("2014/09/01 12:00:04 AM"));
System.out.println(df.parse("2014/09/01"));