我有个功能:
    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;
  }我需要验证string:'2015-01-06T10:51:26.227+0100‘是date,但是funtion总是返回false。有人能告诉我我的dateDormat:"yyyy-MM-dd'T'HH:mm:sssZ"是否正确吗?我读过很多关于格式化日期的问题,但我认为我的dateFormat仍然不正确。
发布于 2016-08-19 10:59:55
我想格式的:sss部分是不正确的。那将是3秒,没有米利斯和一个丢失的点。
应该是:
yyyy-MM-dd'T'HH:mm:ss.SSSZ要调试这一点:让格式化程序格式化当前日期,然后查看输出,看看它是否与您试图解析的内容相匹配。
以上模式实际上取自SimpleDateFormat -示例部分。
在Java8中,您应该使用新的日期/时间类,如这答案中所描述的那样。
发布于 2016-08-19 11:05:03
错误
S.s您的格式应该是
yyyy-MM-dd'T'HH:mm:ss.SSSZ发布于 2016-08-19 15:58:22
tl;dr
不需要格式化模式。
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使用ISO8601格式来解析和生成字符串。因此需要指定一个解析模式。
您的输入在末尾有一个与UTC的偏移量。所以解析作为一个OffsetDateTime。
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() ) ;https://stackoverflow.com/questions/39037223
复制相似问题