我的日期类型为“long”,并希望对其进行验证。它是从xml文件转换到别处。
此日期(2018-01-35为yyyy-mm-dd)应为无效日期。
我已经尝试过:How to sanity check a date in java
中给出的解决方案我将长期转换为日期,但是已经将日期从2018-01-35更改为2018-02-04,因此没有抛出异常。这是完整的代码:
long longDate = 1517695200000L;
Date date = new Date(longDate);
System.out.println("long: " + longDate);
System.out.println("Date: " + date);
Calendar cal = Calendar.getInstance();
cal.setLenient(false);
cal.setTime(date);
try {
cal.getTime();
} catch (Exception e) {
LOG.error("invalid date");
return false;
}
如果没有这种“自我验证”,是否有可能将长期转换为日期?或者有人有另一个想法吗?提前谢谢。
答案 0 :(得分:3)
为了验证日期,您需要XML中的字符串。当你知道如何时,这很简单:
String xmlFileDate = "2018-01-35T00:00+02:00";
try {
OffsetDateTime.parse(xmlFileDate);
} catch (DateTimeParseException dtpe) {
System.err.println("Invalid date");
}
我正在利用你的日期时间字符串是ISO 8601格式这一事实,即现代Java日期和时间类解析为默认格式。
在将日期时间转换为1517695200000L
之后,无法判断它是否来自无效的日期时间字符串,因此此时您无能为力。正如Jon Skeet和AxelH已在评论中所说,long
将始终代表有效日期。
答案 1 :(得分:2)
长是自任意日期(1970年)以来的秒数。 所以它永远是一个有效的日期。过去你可能会考虑世界的开始。 或者10000年与yyyy一样令人难以置信且无法形成。