【问题标题】:Making Java DateFormat work for Shorter Values使 Java DateFormat 适用于较短的值
【发布时间】:2015-12-15 05:48:52
【问题描述】:

我有一个程序,它在程序开始时一劳永逸地从用户那里读取日期格式,例如yyyy/MM/dd HH:mm:ss a

稍后程序会解析一个文件,并对文件中的所有日期使用日期格式。但是最近我得到一个文件,其中 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

谢谢

【问题讨论】:

  • 你是如何解析日期的?可以分享一下代码吗?
  • SimpleDateFormat DATE_TIME_FORMAT = new SimpleDateFormat(USERs INPUT); // "yyyy/MM/dd HH:mm:ss a later on File is read Buffer Reader Loop d1 = DATE_TIME_FORMAT.parse(current Date in files row); // 可能是 "2014/09/01 12:00:04 AM”或只是“2014/09/01”变量绑定结束循环
  • @NomanK 请使用示例代码等更多信息编辑您的问题,而不是作为评论发布。

标签: java date-format simpledateformat


【解决方案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"));

【讨论】:

  • 感谢 Thusitia,但格式来自用户,我目前无法更改代码以解决产品问题,我正在寻找通用 DateFormat :)
  • 在解析函数中,您在函数中声明了两个参数,一个是字符串源,一个是 ParsePosition pos,但是当您调用此函数时,您只向函数传递了一个变量?
  • @L-X 是一个重载的解析方法。解析方法有2种
  • @NomanK hm 那么你能做到吗stackoverflow.com/questions/6653223/…
  • @NomanK 这个答案给了你你想要的,一个处理两种格式中的任何一种的 DateFormat。如果您要求一个完全通用的 DateFormat 来处理任何和所有可能性,那么如果您在发布之前搜索 StackOverflow 就会知道这是不可能的。
猜你喜欢
  • 1970-01-01
  • 2023-03-22
  • 2019-10-12
  • 1970-01-01
  • 2016-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多