我们现在有一种更现代的方式来完成这项工作。
java.time
java.time框架与 Java 8 及更高版本捆绑在一起。请参阅教程。这些新类受到JSR 310定义的Joda-Time的启发,并由ThreeTen-Extra项目扩展。它们是对令人困惑的旧类 java.util.Date/.Calendar 等的巨大改进。
仅日期类
新框架提供了一个类 ,LocalDate
来表示没有任何时间或时区的仅日期。
顺便说一句,使用两位数表示年份是自找麻烦。我强烈建议尽可能使用四位数年份。java.time 框架假定任何两位数的年份都在20xx
世纪中,包括 2000 年到 2099 年。
要解析字符串,请指定预期的格式。您没有使用任何标准的ISO 8601格式,因此我们必须定义格式模式。指定一个区域设置,其中包括我们希望为月份名称找到的语言。
// Parse String representation.
String input = "23-May-12";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "d-MMMM-yy" , Locale.ENGLISH ); // Using four "M" characters means we expect the full name of the month.
LocalDate localDate = formatter.parse ( input , LocalDate :: from );
反过来,要生成日期值的字符串表示,我们可以回收相同的格式化程序。
// Generate String representation.
String output = localDate.format ( formatter );
转储到控制台。
System.out.println ( "input: " + input + " → localDate : " + localDate );
System.out.println ( "localDate : " + localDate + " → output: " + output );
跑的时候。
输入:23-May-12 → localDate : 2012-05-23
localDate : 2012-05-23 → 输出: 23-May-12