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

时间:2015-03-04 15:49:05

标签: java date date-format simpledateformat

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

201406082159

(6月8日,21:59)

最后我试过这个:

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

可悲的是,它无法正常工作并打印出来

Sun Dec 29 21:00:00 CET 2013

3 个答案:

答案 0 :(得分:8)

分钟由m而不是M

设置

年份由y而不是Y

设置

天数(月份)由d而不是D(年份)设置

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

Source

答案 1 :(得分:3)

我建议看一下SimpleDateFormat类的api。

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

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

答案 2 :(得分:0)

您正在使用过时的遗留类。使用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。切勿使用诸如CETESTIST之类的3-4字母缩写,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。

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

关于java.time

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

现在位于Joda-Timemaintenance mode项目建议迁移到java.time。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。

大部分java.time功能都被反向移植到Java 6& ThreeTen-Backport中的7,并进一步适应Android中的ThreeTenABP

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。