Polishing
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2002-2023 the original author or authors.
|
* Copyright 2002-2024 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -45,12 +45,12 @@ public class InstantFormatter implements Formatter<Instant> {
|
|||||||
return Instant.ofEpochMilli(Long.parseLong(text));
|
return Instant.ofEpochMilli(Long.parseLong(text));
|
||||||
}
|
}
|
||||||
catch (NumberFormatException ex) {
|
catch (NumberFormatException ex) {
|
||||||
if (text.length() > 0 && Character.isAlphabetic(text.charAt(0))) {
|
if (!text.isEmpty() && Character.isAlphabetic(text.charAt(0))) {
|
||||||
// assuming RFC-1123 value a la "Tue, 3 Jun 2008 11:05:30 GMT"
|
// assuming RFC-1123 value a la "Tue, 3 Jun 2008 11:05:30 GMT"
|
||||||
return Instant.from(DateTimeFormatter.RFC_1123_DATE_TIME.parse(text));
|
return Instant.from(DateTimeFormatter.RFC_1123_DATE_TIME.parse(text));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// assuming UTC instant a la "2007-12-03T10:15:30.00Z"
|
// assuming UTC instant a la "2007-12-03T10:15:30.000Z"
|
||||||
return Instant.parse(text);
|
return Instant.parse(text);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -644,10 +644,10 @@ class DateTimeFormattingTests {
|
|||||||
@DateTimeFormat(style = "M-")
|
@DateTimeFormat(style = "M-")
|
||||||
private LocalDate styleLocalDate;
|
private LocalDate styleLocalDate;
|
||||||
|
|
||||||
@DateTimeFormat(style = "S-", fallbackPatterns = { "yyyy-MM-dd", "yyyyMMdd", "yyyy.MM.dd" })
|
@DateTimeFormat(style = "S-", fallbackPatterns = {"yyyy-MM-dd", "yyyyMMdd", "yyyy.MM.dd"})
|
||||||
private LocalDate styleLocalDateWithFallbackPatterns;
|
private LocalDate styleLocalDateWithFallbackPatterns;
|
||||||
|
|
||||||
@DateTimeFormat(pattern = "yyyy-MM-dd", fallbackPatterns = { "M/d/yy", "yyyyMMdd", "yyyy.MM.dd" })
|
@DateTimeFormat(pattern = "yyyy-MM-dd", fallbackPatterns = {"M/d/yy", "yyyyMMdd", "yyyy.MM.dd"})
|
||||||
private LocalDate patternLocalDateWithFallbackPatterns;
|
private LocalDate patternLocalDateWithFallbackPatterns;
|
||||||
|
|
||||||
private LocalTime localTime;
|
private LocalTime localTime;
|
||||||
@@ -655,7 +655,7 @@ class DateTimeFormattingTests {
|
|||||||
@DateTimeFormat(style = "-M")
|
@DateTimeFormat(style = "-M")
|
||||||
private LocalTime styleLocalTime;
|
private LocalTime styleLocalTime;
|
||||||
|
|
||||||
@DateTimeFormat(style = "-M", fallbackPatterns = { "HH:mm:ss", "HH:mm"})
|
@DateTimeFormat(style = "-M", fallbackPatterns = {"HH:mm:ss", "HH:mm"})
|
||||||
private LocalTime styleLocalTimeWithFallbackPatterns;
|
private LocalTime styleLocalTimeWithFallbackPatterns;
|
||||||
|
|
||||||
private LocalDateTime localDateTime;
|
private LocalDateTime localDateTime;
|
||||||
@@ -675,7 +675,7 @@ class DateTimeFormattingTests {
|
|||||||
@DateTimeFormat(iso = ISO.DATE_TIME)
|
@DateTimeFormat(iso = ISO.DATE_TIME)
|
||||||
private LocalDateTime isoLocalDateTime;
|
private LocalDateTime isoLocalDateTime;
|
||||||
|
|
||||||
@DateTimeFormat(iso = ISO.DATE_TIME, fallbackPatterns = { "yyyy-MM-dd HH:mm:ss", "M/d/yy HH:mm"})
|
@DateTimeFormat(iso = ISO.DATE_TIME, fallbackPatterns = {"yyyy-MM-dd HH:mm:ss", "M/d/yy HH:mm"})
|
||||||
private LocalDateTime isoLocalDateTimeWithFallbackPatterns;
|
private LocalDateTime isoLocalDateTimeWithFallbackPatterns;
|
||||||
|
|
||||||
private Instant instant;
|
private Instant instant;
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import java.text.ParseException;
|
|||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.time.temporal.ChronoUnit;
|
import java.time.temporal.ChronoUnit;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
@@ -50,13 +51,12 @@ class InstantFormatterTests {
|
|||||||
|
|
||||||
private final InstantFormatter instantFormatter = new InstantFormatter();
|
private final InstantFormatter instantFormatter = new InstantFormatter();
|
||||||
|
|
||||||
|
|
||||||
@ParameterizedTest
|
@ParameterizedTest
|
||||||
@ArgumentsSource(ISOSerializedInstantProvider.class)
|
@ArgumentsSource(ISOSerializedInstantProvider.class)
|
||||||
void should_parse_an_ISO_formatted_string_representation_of_an_Instant(String input) throws ParseException {
|
void should_parse_an_ISO_formatted_string_representation_of_an_Instant(String input) throws ParseException {
|
||||||
Instant expected = DateTimeFormatter.ISO_INSTANT.parse(input, Instant::from);
|
Instant expected = DateTimeFormatter.ISO_INSTANT.parse(input, Instant::from);
|
||||||
|
Instant actual = instantFormatter.parse(input, Locale.US);
|
||||||
Instant actual = instantFormatter.parse(input, null);
|
|
||||||
|
|
||||||
assertThat(actual).isEqualTo(expected);
|
assertThat(actual).isEqualTo(expected);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,9 +64,7 @@ class InstantFormatterTests {
|
|||||||
@ArgumentsSource(RFC1123SerializedInstantProvider.class)
|
@ArgumentsSource(RFC1123SerializedInstantProvider.class)
|
||||||
void should_parse_an_RFC1123_formatted_string_representation_of_an_Instant(String input) throws ParseException {
|
void should_parse_an_RFC1123_formatted_string_representation_of_an_Instant(String input) throws ParseException {
|
||||||
Instant expected = DateTimeFormatter.RFC_1123_DATE_TIME.parse(input, Instant::from);
|
Instant expected = DateTimeFormatter.RFC_1123_DATE_TIME.parse(input, Instant::from);
|
||||||
|
Instant actual = instantFormatter.parse(input, Locale.US);
|
||||||
Instant actual = instantFormatter.parse(input, null);
|
|
||||||
|
|
||||||
assertThat(actual).isEqualTo(expected);
|
assertThat(actual).isEqualTo(expected);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,20 +72,18 @@ class InstantFormatterTests {
|
|||||||
@ArgumentsSource(RandomInstantProvider.class)
|
@ArgumentsSource(RandomInstantProvider.class)
|
||||||
void should_serialize_an_Instant_using_ISO_format_and_ignoring_Locale(Instant input) {
|
void should_serialize_an_Instant_using_ISO_format_and_ignoring_Locale(Instant input) {
|
||||||
String expected = DateTimeFormatter.ISO_INSTANT.format(input);
|
String expected = DateTimeFormatter.ISO_INSTANT.format(input);
|
||||||
|
String actual = instantFormatter.print(input, Locale.US);
|
||||||
String actual = instantFormatter.print(input, null);
|
|
||||||
|
|
||||||
assertThat(actual).isEqualTo(expected);
|
assertThat(actual).isEqualTo(expected);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ParameterizedTest
|
@ParameterizedTest
|
||||||
@ArgumentsSource(RandomEpochMillisProvider.class)
|
@ArgumentsSource(RandomEpochMillisProvider.class)
|
||||||
void should_parse_into_an_Instant_from_epoch_milli(Instant input) throws ParseException {
|
void should_parse_into_an_Instant_from_epoch_milli(Instant input) throws ParseException {
|
||||||
Instant actual = instantFormatter.parse(Long.toString(input.toEpochMilli()), null);
|
Instant actual = instantFormatter.parse(Long.toString(input.toEpochMilli()), Locale.US);
|
||||||
|
|
||||||
assertThat(actual).isEqualTo(input);
|
assertThat(actual).isEqualTo(input);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static class RandomInstantProvider implements ArgumentsProvider {
|
private static class RandomInstantProvider implements ArgumentsProvider {
|
||||||
|
|
||||||
private static final long DATA_SET_SIZE = 10;
|
private static final long DATA_SET_SIZE = 10;
|
||||||
@@ -109,6 +105,7 @@ class InstantFormatterTests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static class ISOSerializedInstantProvider extends RandomInstantProvider {
|
private static class ISOSerializedInstantProvider extends RandomInstantProvider {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -117,6 +114,7 @@ class InstantFormatterTests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static class RFC1123SerializedInstantProvider extends RandomInstantProvider {
|
private static class RFC1123SerializedInstantProvider extends RandomInstantProvider {
|
||||||
|
|
||||||
// RFC-1123 supports only 4-digit years
|
// RFC-1123 supports only 4-digit years
|
||||||
@@ -130,6 +128,8 @@ class InstantFormatterTests {
|
|||||||
.map(DateTimeFormatter.RFC_1123_DATE_TIME.withZone(systemDefault())::format);
|
.map(DateTimeFormatter.RFC_1123_DATE_TIME.withZone(systemDefault())::format);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static final class RandomEpochMillisProvider implements ArgumentsProvider {
|
private static final class RandomEpochMillisProvider implements ArgumentsProvider {
|
||||||
|
|
||||||
private static final long DATA_SET_SIZE = 10;
|
private static final long DATA_SET_SIZE = 10;
|
||||||
|
|||||||
Reference in New Issue
Block a user