Skip to content

Commit

Permalink
Support relaxed validation for handling incompatible temporal types
Browse files Browse the repository at this point in the history
  • Loading branch information
benfortuna committed Jul 28, 2021
1 parent 1027c18 commit 20f3c00
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 2 deletions.
Expand Up @@ -12,6 +12,7 @@
import java.time.temporal.ChronoUnit;
import java.time.temporal.Temporal;
import java.time.temporal.TemporalAmount;
import java.util.Arrays;
import java.util.Date;

/**
Expand Down Expand Up @@ -129,12 +130,14 @@ private String durationToString(Duration duration) {

public static TemporalAmountAdapter parse(String value) {
TemporalAmount retVal = null;
if ("P".equals(value) && CompatibilityHints.isHintEnabled(CompatibilityHints.KEY_RELAXED_PARSING)) {
if (Arrays.asList("P", "PT").contains(value)
&& CompatibilityHints.isHintEnabled(CompatibilityHints.KEY_RELAXED_PARSING)) {
retVal = Period.ZERO;
}
else if (value.matches("([+-])?P.*(W|D)")) {
retVal = java.time.Period.parse(value);
} else if (value.matches("P([+-]?[0-9]*[MHS])+")) {
} else if (CompatibilityHints.isHintEnabled(CompatibilityHints.KEY_RELAXED_PARSING)
&& value.matches("P([+-]?[0-9]*[MHS])+")) {
retVal = java.time.Duration.parse("PT" + value.substring(1));
} else {
retVal = java.time.Duration.parse(value);
Expand Down
Expand Up @@ -7,6 +7,7 @@ import spock.lang.Unroll

import java.time.Duration
import java.time.LocalDateTime
import java.time.temporal.ChronoUnit

class TemporalAmountAdapterTest extends Specification {

Expand Down Expand Up @@ -45,6 +46,8 @@ class TemporalAmountAdapterTest extends Specification {
where:
stringValue | expectedDuration
"P" | java.time.Period.ZERO
"PT" | java.time.Period.ZERO
"P90M" | Duration.of(90, ChronoUnit.MINUTES)
}

def 'verify temporalamount creation'() {
Expand Down

0 comments on commit 20f3c00

Please sign in to comment.