Android中的ISO 8601字符串到日期/时间对象

时间:2010-10-15 10:24:12

标签: java android parsing iso8601

我有一个标准ISO 8601格式的字符串,其中包含从Web服务返回的日期/时间,如下所示:

String dtStart = "2010-10-15T09:27:37Z"

如何将其转换为时间或日期等对象?我最初想要以不同的格式输出它,但是稍后需要用它来做其他的事情(也许可以使用不同的格式)。

干杯

5 个答案:

答案 0 :(得分:117)

String dtStart = "2010-10-15T09:27:37Z";  
SimpleDateFormat  format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");  
try {  
    Date date = format.parse(dtStart);  
    System.out.println(date);  
} catch (ParseException e) {  
    // TODO Auto-generated catch block  
    e.printStackTrace();  
}

这就是你要找的东西。这个问题有existing post

答案 1 :(得分:5)

这个问题在2010年被问到,当时正确的是SimpleDateFormat或Joda-Time是您应该使用的工具。现在已经有一段时间了。今天使用

    Instant iStart = Instant.parse(dtStart);

是的,就是这么简单。您的字符串采用ISO 8601格式,现代Java日期和时间API java.time中的类解析ISO 8601,没有任何明确的格式化程序。 Instant只是其中一个类。

问题:我可以在Android上使用java.time吗?

是的,java.time适用于较旧和较新的Android设备。它只需要至少Java 6

  • 在Java 8及更高版本和更新的Android设备上(来自API级别26,我被告知)现代API内置。
  • 在Java 6和7中获取ThreeTen Backport,新类的后端端口(适用于JSR 310的ThreeTen;请参阅底部的链接)。
  • On(较旧)Android使用Android版的ThreeTen Backport。它被称为ThreeTenABP。并确保使用子包从org.threeten.bp导入日期和时间类。

链接

答案 2 :(得分:2)

您可以使用Java's SimpleDateFormat parse method或使用JodaTime's DateTimeFormat创建DateTimeFormatter并相应地parse to a DateTime object

答案 3 :(得分:0)

如果您使用当前的java.timethreetenbp,只需像这样解析它:

ZonedDateTime dt = ZonedDateTime.parse(dtStart);

现在您可以访问日期和时间值,例如年,月,小时等。

答案 4 :(得分:-1)

假设您想根据列分隔值计算时差 完成 - > 15时24分04秒
开始 - > 9点27分37秒
如果不使用 日期 SimpleDateFormat ,我就是这样做的:

String tStart = "09:27:37";
String tFinish = "15:24:04";

String[] sTimeHourMinSec = tStart.split(":");
int sHour = Integer.valueOf(sTimeHourMinSec[0]);
int sMin = Integer.valueOf(sTimeHourMinSec[1]);
int sSec = Integer.valueOf(sTimeHourMinSec[2]);

String[] fTimeHourMinSec = tFinish.split(":");
int fHour = Integer.valueOf(fTimeHourMinSec[0]);
int fMin = Integer.valueOf(fTimeHourMinSec[1]);
int fSec = Integer.valueOf(fTimeHourMinSec[2]);

int diffTotSec = (fHour - sHour) * 3600 + (fMin - sMin) * 60 + (fSec - sSec);
int diffHours = diffTotSec / 3600;
int diffMins = (diffTotSec % 3600) / 60;
int diffSecs = (diffTotSec % 3600) % 60;

System.out.println("Difference: " + diffHours + " h " + diffMins + " m " + diffSecs + " sec");