Java 8 DateTimeFormatter analyse pour les secondes fractionnelles facultatives d'importance variable
Mon MCVE (comme un TestNG de test de l'unité):
public class MyDateTimeFormatterTest {
private static final String BASE_PATTERN = "yyyy/MM/dd HH:mm:ss";
private static final DateTimeFormatter FORMATTER =
DateTimeFormatter.ofPattern(BASE_PATTERN + "[.SSSSSSSSS]");
private static final LocalDateTime TEST_INPUT =
LocalDateTime.of(2015, 5, 4, 12, 34, 56, 123456789);
@DataProvider(name = "test-cases")
public Iterator<Object[]> getTestCases() {
return Arrays.asList(testFor("", ChronoUnit.SECONDS),
testFor(".SSS", ChronoUnit.MILLIS),
testFor(".SSSSSS", ChronoUnit.MICROS),
testFor(".SSSSSSSSS", ChronoUnit.NANOS)).iterator();
}
@Test(dataProvider = "test-cases")
public void testWithDefaultResolution(String input, LocalDateTime output) {
assertThat(FORMATTER.parse(input, LocalDateTime::from), equalTo(output));
}
private Object[] testFor(String patternSuffix, TemporalUnit truncatedTo) {
return new Object[] { DateTimeFormatter.ofPattern(BASE_PATTERN + patternSuffix)
.format(TEST_INPUT), TEST_INPUT.truncatedTo(truncatedTo) };
}
}
Je suis en train de tester le traitement d'une date-heure String
avec facultatif fractions de secondes une importance différente à l'aide de DateTimeFormatter
. La partie pertinente de la Javadoc lit:
Fraction: les Sorties de la nano-de-second champ comme une fraction de seconde. Le nano-de-la deuxième valeur a neuf chiffres, donc le nombre de modèle de lettres est de 1 à 9. Si elle est inférieure à 9, puis à la nano-seconde valeur est tronquée, avec seulement les chiffres les plus significatifs en cours de sortie.
Basé sur ma compréhension limitée, j'ai utilisé [...]
pour marquer les fractions de seconde en option, et depuis que je m'intéresse à divers importance, j'ai pensé que je devais m'en tenir à SSSSSSSSS
.
Cependant, le test de l'unité ne parvient pas à l'analyse jusqu'à millisecondes et quelques microsecondes, c'est à dire le deuxième et le troisième cas. La modification de la ResolverStyle
à CLÉMENT
n'a pas d'aide ici, car elle ne tient pas à l'analyse de scène, pas la résolution.
Pourrais-je savoir qui se rapproche de ce que je dois envisager pour résoudre mon problème? Dois-je utiliser DateTimeFormatterBuilder
également la possibilité de spécifier à chaque chiffre fractionnaire (9 fois), ou est-il plus "intelligemment" sorte avec mon modèle?
modifier j'ai trouvé ma réponse en fin de compte... va encore laisser cela comme sans réponse pendant une journée et voir si il y a d'autres approches ou pas.
source d'informationauteur h.j.k.
Vous devez vous connecter pour publier un commentaire.
Oh cool, un autre 15 minutes de dépannage a donné ceci:
modifier
parseLenient()
est en option.