java - 使 Java DateFormat 适用于较短的值

标签 java date-format simpledateformat

我有一个程序,可以在程序开始时一次性从用户那里读取日期格式,例如yyyy/MM/dd HH:mm:ss a

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

但是该文件中的一个日期只是 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 上午
  2. 2014/09/01

谢谢

最佳答案

您必须使用两种格式。检查下面的示例

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"));

关于java - 使 Java DateFormat 适用于较短的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34281971/

相关文章:

java - 枚举中的 ThreadLocal SimpleDateFormat?

c# - 通过 C++ 包装器从 java 调用 c# dll 时出错

java - 如何将俄罗斯日期格式转换为美国日期格式?

c# 首字母大写

Java日期解析问题-SimpleDateFormat自动递减月份

java - 无法识别 Android ParseDateException EDT 时区

java - 实现自定义 Spring Security 身份验证方法

java - Android 线性布局上的 Weight 属性不起作用

java - 如何设置密码必须包含至少八个字符、至少一个数字、小写字母和特殊字符?

Javascript格式化日期值