С первым выпуском Java 8 (b132) в Mac OS X (Mavericks) этот код с использованием нового java.time package работает
String input = "20111203123456";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyyMMddHHmmss");
LocalDateTime localDateTime = LocalDateTime.parse( input, formatter );
Рендеринг:
2011-12-03T12:34:56
Но когда я добавляю "SS" для доли секунды (и "55" в качестве ввода), как указано в DateTimeFormatter class doc, генерируется исключение:
java.time.format.DateTimeParseException: Text '2011120312345655' could not be parsed at index 0
Док говорит, что режим Strict используется по умолчанию и требует того же числа символов формата, что и входные цифры. Поэтому я смущен, почему этот код не работает:
String input = "2011120312345655";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyyMMddHHmmssSS");
LocalDateTime localDateTime = LocalDateTime.parse( input, formatter );
Другой пример, использующий пример из документации ( "978" ) (сбой):
String input = "20111203123456978";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyyMMddHHmmssSSS");
LocalDateTime localDateTime = LocalDateTime.parse( input, formatter );
В этом примере работает, добавив десятичную точку (но я не нашел такого требования в документе):
String input = "20111203123456.978";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyyMMddHHmmss.SSS");
LocalDateTime localDateTime = LocalDateTime.parse( input, formatter );
Визуализирует:
localDateTime: 2011-12-03T12:34:56.978
Опускание символа периода либо из входной строки, либо из формата вызывает сбой.
Не удается:
String input = "20111203123456.978";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyyMMddHHmmssSSS");
LocalDateTime localDateTime = LocalDateTime.parse( input, formatter );
Не удается:
String input = "20111203123456978";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyyMMddHHmmss.SSS");
LocalDateTime localDateTime = LocalDateTime.parse( input, formatter );