使用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.timeJoda-Time即可。它包含了乔达(Joda)几乎所有的好东西。对于那些已经熟悉Joda API的人,Stephen
Colebourne的Joda-Time到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一样)。



