42

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 );
4

3 に答える 3