From 8ec2c843ebec53cbfd961a555bb94ea68972376c Mon Sep 17 00:00:00 2001 From: Marco Zanon Date: Tue, 28 Apr 2020 20:03:24 +0000 Subject: [PATCH] Implemented strict date/datetime parsing. --- .../marcozanon/macaco/conversion/MLocalDateConverter.java | 7 ++++--- .../macaco/conversion/MLocalDateTimeConverter.java | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/java/com/marcozanon/macaco/conversion/MLocalDateConverter.java b/src/java/com/marcozanon/macaco/conversion/MLocalDateConverter.java index 2fd5725..ea3f761 100644 --- a/src/java/com/marcozanon/macaco/conversion/MLocalDateConverter.java +++ b/src/java/com/marcozanon/macaco/conversion/MLocalDateConverter.java @@ -11,6 +11,7 @@ import com.marcozanon.macaco.text.MText; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; +import java.time.format.ResolverStyle; import java.util.LinkedHashSet; import java.util.Locale; @@ -98,7 +99,7 @@ public class MLocalDateConverter extends MObject { } // try { - DateTimeFormatter.ofPattern(dateFormat); + DateTimeFormatter.ofPattern(dateFormat).withResolverStyle(ResolverStyle.STRICT); } catch (IllegalArgumentException exception) { throw new IllegalArgumentException(String.format("Invalid 'dateFormat': %s.", dateFormat)); // no need to propagate exception @@ -116,7 +117,7 @@ public class MLocalDateConverter extends MObject { // LocalDate d = null; try { - d = LocalDate.parse(x, DateTimeFormatter.ofPattern(inputDateFormat, inputLocale)); + d = LocalDate.parse(x, DateTimeFormatter.ofPattern(inputDateFormat, inputLocale).withResolverStyle(ResolverStyle.STRICT)); } catch (DateTimeParseException exception) { throw new MInvalidConversionFormatException(String.format("Invalid 'x' or parsing: %s (input format: %s).", x, inputDateFormat)); // no need to propagate exception @@ -134,7 +135,7 @@ public class MLocalDateConverter extends MObject { throw new IllegalArgumentException("Invalid 'outputLocale': null."); } // - return date.format(DateTimeFormatter.ofPattern(outputDateFormat, outputLocale)); + return date.format(DateTimeFormatter.ofPattern(outputDateFormat, outputLocale).withResolverStyle(ResolverStyle.STRICT)); } public LocalDate getDateFromString(String x) throws MInvalidConversionFormatException { diff --git a/src/java/com/marcozanon/macaco/conversion/MLocalDateTimeConverter.java b/src/java/com/marcozanon/macaco/conversion/MLocalDateTimeConverter.java index 9b95708..b7026d5 100644 --- a/src/java/com/marcozanon/macaco/conversion/MLocalDateTimeConverter.java +++ b/src/java/com/marcozanon/macaco/conversion/MLocalDateTimeConverter.java @@ -11,6 +11,7 @@ import com.marcozanon.macaco.text.MText; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; +import java.time.format.ResolverStyle; import java.util.LinkedHashSet; import java.util.Locale; @@ -98,7 +99,7 @@ public class MLocalDateTimeConverter extends MObject { } // try { - DateTimeFormatter.ofPattern(datetimeFormat); + DateTimeFormatter.ofPattern(datetimeFormat).withResolverStyle(ResolverStyle.STRICT); } catch (IllegalArgumentException exception) { throw new IllegalArgumentException(String.format("Invalid 'datetimeFormat': %s.", datetimeFormat)); // no need to propagate exception @@ -116,7 +117,7 @@ public class MLocalDateTimeConverter extends MObject { // LocalDateTime dt = null; try { - dt = LocalDateTime.parse(x, DateTimeFormatter.ofPattern(inputDatetimeFormat, inputLocale)); + dt = LocalDateTime.parse(x, DateTimeFormatter.ofPattern(inputDatetimeFormat, inputLocale).withResolverStyle(ResolverStyle.STRICT)); } catch (DateTimeParseException exception) { throw new MInvalidConversionFormatException(String.format("Invalid 'x' or parsing: %s (input format: %s).", x, inputDatetimeFormat)); // no need to propagate exception @@ -134,7 +135,7 @@ public class MLocalDateTimeConverter extends MObject { throw new IllegalArgumentException("Invalid 'outputLocale': null."); } // - return datetime.format(DateTimeFormatter.ofPattern(outputDatetimeFormat, outputLocale)); + return datetime.format(DateTimeFormatter.ofPattern(outputDatetimeFormat, outputLocale).withResolverStyle(ResolverStyle.STRICT)); } public LocalDateTime getDatetimeFromString(String x) throws MInvalidConversionFormatException { -- 2.30.2