android java 从字符串中解析日期

android java parse date from string

在 android 应用程序中,我试图从字符串中解析日期以找出两个时间之间的差异。

SimpleDateFormat dateFormatDateAndTime = new SimpleDateFormat("ddMMyyyyHHMM");
Date startDateTime = dateFormatDateAndTime.parse("060420150134");
Log.v(TAG, "startDateTime: " + startDateTime);  //Fri Oct 06 01:00:00 GMT+05:30 2017   

所以,我必须解析 060420150134 以便得到 06 Apr 2015 01:34,为此我的格式是 ddMMyyyyHHMM

但我到了这里Fri Oct 06 01:00:00 GMT+05:30 2017

所以我做错了什么?这里怎么解析?

 Log.v(TAG, "startDateTime: " + startDateTime + "stopDateTime: " + stopDateTime); 
//Fri Oct 06 01:00:00 GMT+05:30 2017   Fri Jan 06 04:00:00 GMT+05:30 2017

你输出日期对象,而不是字符串。当你使用这个:"startDateTime: " + startDateTime + "stopDateTime: " + stopDateTime, java 将调用方法 toString() 在 stopDateTime 和 startDateTime 对象中。

您需要将第二个MM(月)改为mm(分钟):

SimpleDateFormat dateFormatDateAndTime = new SimpleDateFormat("ddMMyyyyHHmm");

tl;博士

LocalDateTime.parse( 
    "060420150134" , 
    DateTimeFormatter.ofPattern( "ddMMuuuuHHmm" )
).atOffset( ZoneOffset.UTC )

使用java.time

正如 所说,您的格式设置不正确。

此外,您使用的是麻烦的旧日期时间 classes,它们现在已成为遗留问题,已被 java.time classes 取代。请参阅下面的 Android 信息。

格式化模式代码相似但不完全相同。因此,请研究 DateTimeFormatter 的 class 文档。

String input = "060420150134" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "ddMMuuuuHHmm" );

您的输入字符串缺少任何与 UTC 或时区的偏移指示符。所以我们解析为 LocalDateTime.

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

如果您确切知道此数据的时区或偏移量,请应用 ZoneId 以获得 ZonedDateTime 或应用 ZoneOffset 以获得 OffsetDateTime.显然,在您的上下文中,UTC 本身就是有意的。

OffsetDateTime odt = ldt.atOffset( ZoneOffset.UTC ) ; 

关于java.time

java.time framework is built into Java 8 and later. These classes supplant the troublesome old legacy date-time classes such as java.util.Date, Calendar, & SimpleDateFormat.

Joda-Time project, now in maintenance mode, advises migration to the java.time classes.

要了解更多信息,请参阅 Oracle Tutorial. And search Stack Overflow for many examples and explanations. Specification is JSR 310

从哪里获得java.time classes?

  • Java SE 8 and SE 9 及更高版本
    • 内置。
    • 标准 Java API 的一部分,带有捆绑实施。
    • Java 9 添加了一些小功能和修复。
  • Java SE 6 and SE 7
  • Android
    • ThreeTenABP 项目专门为 Android 改编 ThreeTen-Backport(如上所述)。

ThreeTen-Extra project extends java.time with additional classes. This project is a proving ground for possible future additions to java.time. You may find some useful classes here such as Interval, YearWeek, YearQuarter, and more.