使用Joda-Time,看看日期时间格式 http://www.joda.org/joda-time/apidocs/org/joda/time/format/DateTimeFormat.html;它允许解析您提到的两种日期字符串(以及几乎任何其他任意格式)。如果您的需求更复杂,请尝试日期时间格式化程序生成器 http://www.joda.org/joda-time/apidocs/org/joda/time/format/DateTimeFormatterBuilder.html.
解析#1:
DateTimeFormatter f = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
DateTime dateTime = f.parseDateTime("2012-01-10 23:13:26");
编辑:实际上本地日期时间 http://www.joda.org/joda-time/apidocs/org/joda/time/LocalDateTime.html对于没有时区的日期时间来说是更合适的类型:
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 https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html而不是乔达时间。它几乎包含了 Joda 的所有好东西——或者类似的东西。对于那些已经熟悉 Joda API 的人来说,Stephen Colebourne 的Joda-Time 到 java.time 迁移指南 http://blog.joda.org/2014/11/converting-from-joda-time-to-javatime.html派上用场了。
以下是上述示例的 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 一样)。