我有功能:
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仍然不正确。
答案 0 :(得分:4)
错误
S
.
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)
无需格式化模式。
java.util.Date utilDate = java.util.Date.from( OffsetDateTime.parse( "2015-01-06T10:51:26.227+0100" ).toInstant() );
对于无效输入,请抓住DateTimeParseException
。
其他答案是正确的但使用过时的类。麻烦的旧遗留日期时间类已被java.time类取代。
您的输入字符串采用标准ISO 8601格式。 java.time默认使用ISO 8601格式来解析和生成字符串。所以需要指定一个解析模式。
您的输入结尾有与UTC的偏移量。所以parse为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() ) ;