Mac OS X (Mavericks) での Java 8 (b132) の最初のリリースでは、新しいjava.time パッケージを使用した次のコードが機能します。
String input = "20111203123456";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyyMMddHHmmss");
LocalDateTime localDateTime = LocalDateTime.parse( input, formatter );
レンダリング:
2011-12-03T12:34:56
しかし、 DateTimeFormatter クラス docで指定されているように、秒の小数部に「SS」(および入力として「55」) を追加すると、例外がスローされます。
java.time.format.DateTimeParseException: Text '2011120312345655' could not be parsed at index 0
ドキュメントには、デフォルトで厳密モードが使用され、入力数字と同じ数のフォーマット文字が必要であると書かれています。したがって、このコードが失敗する理由がわかりません。
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 );