SimpleDateFormatを使って、日付フォーマット - 再び 2014/02/16

javaです。日付フォーマットです。

何度も似たようなものではまってる自分がいるので、メモ

今回、SimpleDateFormatをシンプルに使った場合の動作の確認が目的
使うフォーマットは、yyyyMMdd

lenientは設定しない(デフォルト)
設定する(true)ですと、今回試した値は全て例外となります。

00000000 00021130
99999999 100070607
19990000 19981130
00009900 00080229
00000099 00010308
19990099 19990309
20130230 20130302
20140231 20140303
Unparseable date: "2013"
Unparseable date: "201401"
2014020 20140131


 使ったコードは、
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class TestSimplaDateFormat { public static void main(String[] args) throws ParseException { a(); } static void a() throws ParseException { // 文字列から日付の生成 { // どういう値になるかチェック test("00000000"); test("99999999"); test("19990000");// test("00009900"); test("00000099"); test("19990099"); } { // 存在しない日付 test("20130230"); test("20140231"); } { // 桁が足りない testNoThrowE("2013");// 4桁(月日なし) testNoThrowE("201401");// 6桁(日なし) testNoThrowE("2014020"); // 7桁 } } static void testNoThrowE(String s) { try { test(s); } catch (ParseException e) { System.out.println(e.getMessage()); } } static void test(String s) throws ParseException { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); Date date = dateFormat.parse(s); System.out.printf("%s\t%s\n", s, dateFormat.format(date)); } }

: