解析字符串java的日期格式

时间:2016-08-19 10:53:02

标签: java date

我有功能:

    public boolean isValidDate(String inDate) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:sssZ");
        dateFormat.setLenient(false);
    try {
      dateFormat.parse(inDate.trim());
    } catch (ParseException pe) {
      return false;
    }
    return true;
  }

我需要验证字符串:'2015-01-06T10:51:26.227+0100'是否为日期,但功能总是返回false。有人可以告诉我,我的dateDormat:"yyyy-MM-dd'T'HH:mm:sssZ"是否正确? 我读了很多关于格式化日期的问题,但我认为我的dateFormat仍然不正确。

3 个答案:

答案 0 :(得分:4)

错误

  • 缺少毫秒S
  • 在秒和毫秒之间缺少点.
  • 放3秒s

您的格式应为

yyyy-MM-dd'T'HH:mm:ss.SSSZ

答案 1 :(得分:3)

我想格式的:sss部分不正确。那将是3秒,没有Millis和丢失的点。

应该是

yyyy-MM-dd'T'HH:mm:ss.SSSZ

要调试此问题:让格式化程序格式化当前日期,然后查看输出并查看它是否与您要解析的内容相匹配。

上述模式实际上来自SimpleDateFormat - 示例部分。

在Java 8 中,您应该使用this答案中描述的新日期/时间类。

答案 2 :(得分:1)

TL;博士

无需格式化模式。

java.util.Date utilDate = java.util.Date.from( OffsetDateTime.parse( "2015-01-06T10:51:26.227+0100" ).toInstant() );

对于无效输入,请抓住DateTimeParseException

java.time

其他答案是正确的但使用过时的类。麻烦的旧遗留日期时间类已被java.time类取代。

您的输入字符串采用标准ISO 8601格式。 java.time默认使用ISO 8601格式来解析和生成字符串。所以需要指定一个解析模式。

您的输入结尾有与UTC的偏移量。所以parseOffsetDateTime

OffsetDateTime odt = OffsetDateTime.parse( "2015-01-06T10:51:26.227+0100" );

捕获DateTimeParseException表示输入数据无效。

如果必须有一个java.util.Date对象用于尚未针对java.time类型更新的旧代码,则可以进行转换。寻找添加到旧类中的新方法以便于转换。

java.util.Date utilDate = java.util.Date.from( odt.toInstant() ) ;