我怎样才能正确解析这种日期?

How can I correctly parse this kind of date?

我无法为我的日期找到正确且干净的工作解决方案,格式如下:

201406082159

(6 月 8 日,此处 21:59)

我最后尝试的是:

SimpleDateFormat format2 = new SimpleDateFormat("YYYYMMDDHHMM", Locale.ENGLISH); 

遗憾的是它无法正常打印

Sun Dec 29 21:00:00 CET 2013

分钟由 m 而非 M

设置

年份由 y 而非 Y

设置

天数(以月为单位)由 d 而非 D(以年为单位)设置

SimpleDateFormat format2 = new SimpleDateFormat("yyyyMMddHHmm", Locale.ENGLISH); 

Source

我建议看一下 SimpleDateFormat class 的 api。

http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

它将帮助您解决当前的问题,如果您有不同的日期格式要解析,将来您一定能够找到正确的模式。

您使用的是过时的旧版 类。使用 java.time 类 进行日期时间工作。

DateTimeFormatter

定义格式模式。

String input = "201406082159";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuuMMddHHmm" );

LocalDateTime

您的输入缺少有关任何与 UTC 或时区的偏移量的信息。所以我们解析为 LocalDateTime.

LocalDateTime ldt = LocalDateTime.parse( input , f );

ZonedDateTime

如果您知道数据的上下文适用于某个时区,请应用它。指定 proper time zone name。切勿使用 3-4 个字母的缩写,例如 CETESTIST,因为它们不是真正的时区,没有标准化,甚至不是唯一的(!)。

ZoneId zoneId = ZoneId.of( "Europe/Paris" );
ZonedDateTime zdt = ldt.atZone( zoneId );

关于java.time

java.time 框架内置于 Java 8 及更高版本中。这些 类 取代了旧的麻烦的日期时间 类,例如 java.util.Date.Calendarjava.text.SimpleDateFormat

Joda-Time project, now in maintenance mode,建议迁移到java.time。

要了解更多信息,请参阅 Oracle Tutorial。并在 Stack Overflow 中搜索许多示例和解释。

许多 java.time 功能被移植到 ThreeTen-Backport and further adapted to Android in ThreeTenABP 中的 Java 6 和 7。

ThreeTen-Extra 项目扩展了 java.time 并增加了 类。该项目是未来可能添加到 java.time.

的试验场