使用Joda-Time,看看DateTimeFormat;它允许解析您提到的两种日期字符串(以及几乎任何其他任意格式)。如果您的需求更加复杂,请尝试DateTimeFormatterBuilder。
解析 #1:
DateTimeFormatter f = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
DateTime dateTime = f.parseDateTime("2012-01-10 23:13:26");
编辑:实际上LocalDateTime对于没有时区的日期时间来说是一种更合适的类型:
LocalDateTime dateTime = f.parseLocalDateTime("2012-01-10 23:13:26");
对于#2:
DateTimeFormatter f = DateTimeFormat.forPattern("MMMM dd, yyyy");
LocalDate localDate = f.parseLocalDate("January 13, 2012");
是的,就Java日期和时间处理而言,Joda-Time绝对是要走的路。:)
正如大多数人都会同意的那样,Joda是一个非常用户友好的库。例如,我以前从未使用Joda进行过这种解析,但是我只花了几分钟时间从API中找出并编写它。
更新 (2015)
如果您使用的是Java 8,在大多数情况下,您应该简单地使用java.time
而不是Joda-Time。它包含了Joda几乎所有的好东西 - 或者它们的等价物。对于那些已经熟悉Joda API的人来说,Stephen Colebourne的Joda-Time to java.time迁移指南派上了用场。
以下是上述示例的 java.time 版本。
解析 #1:
DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime dateTime = LocalDateTime.from(f.parse("2012-01-10 23:13:26"));
你不能把它解析为ZonedDateTime或OffsetDateTime(它们是Joda的DateTime的对应物,在我的原始答案中使用),但这有点有意义,因为解析的字符串中没有时区信息。
解析 #2:
DateTimeFormatter f = DateTimeFormatter.ofPattern("MMMM dd, yyyy");
LocalDate localDate = LocalDate.from(f.parse("January 13, 2012"));
在这里,LocalDate是最合适的解析类型(就像Joda-Time一样)。