ZonedDateTime:我希望parse()在无效日期

时间:2016-08-03 04:11:40

标签: datetime java-8

我想我只是期望这给我一个解析异常,但它没有。如果日期无效,我希望解析失败。 (那是我需要知道的)

补充说明:使用2月30日作为无效日期:(事实上,我需要做的是收到五个字符串;年,月,日,小时,分钟,我汇编到str(下面) )并查看它们是否作为有效的日期时间聚集在一起(ZONE_ID)。

String ZONE_NAME = "America/Los_Angeles";
ZoneId ZONE_ID = ZoneId.of(ZONE_NAME);
String ldtfPattern = "yyyy/MM/dd HH:mm";
DateTimeFormatter localDateTimeFormatter = 
        DateTimeFormatter.ofPattern(ldtfPattern);

String str = "2016/02/30 21:09";

try {
    zdt = ZonedDateTime.parse(str, localDateTimeFormatter().withZone(ZONE_ID));
} catch(DateTimeParseException e) {
    return null;
}
return zdt;

上面解析后的zdt的字符串值是 2016-02-29T21:09-08:00[America/Los_Angeles]

1 个答案:

答案 0 :(得分:2)

一只小鸟告诉我尝试使用withResolverStyle()设置为STRICT。有了这个,我需要做的唯一其他技巧是合并era into my year。所以上面的变化是:

String ldtfPattern = "uuuu/MM/dd HH:mm";

zdt = ZonedDateTime.parse(str, 
                getLocalDateTimeFormatter().withZone(ZONE_ID).withResolverStyle(ResolverStyle.STRICT));

这对我有用。