我想我只是希望这会给我一个解析异常,但事实并非如此。如果日期无效,我希望解析失败。(这是我需要知道的)
添加注释:使用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]
一只小鸟告诉我尝试使用设置为STRICT
的withResolverStyle()
。有了这些,我唯一需要的另一个技巧就是把这个时代融入我的一年。所以上面的变化是:
String ldtfPattern = "uuuu/MM/dd HH:mm";
和
zdt = ZonedDateTime.parse(str,
getLocalDateTimeFormatter().withZone(ZONE_ID).withResolverStyle(ResolverStyle.STRICT));
这对我很有效。