如何在Java中验证一个长的日期

时间:2017-11-02 14:15:49

标签: java validation date calendar

我的日期类型为“long”,并希望对其进行验证。它是从xml文件转换到别处。

  • xml文件日期:2018-01-35T00:00 + 02:00
  • 长日期:1517695200000L

此日期(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;
}

如果没有这种“自我验证”,是否有可能将长期转换为日期?或者有人有另一个想法吗?提前谢谢。

2 个答案:

答案 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一样令人难以置信且无法形成。