52

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

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

如何将其放入时间或日期等对象中?我最初想以不同的格式输出它,但以后需要用它做其他事情(即可能以不同的格式使用)。

干杯

4

5 回答 5

128
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) {  
    e.printStackTrace();  
}

这就是你要找的。有关于这个问题的现有帖子。

于 2010-10-15T10:44:07.307 回答
7

这个问题是在 2010 年提出的,当时SimpleDateFormat您应该使用 Joda-Time 或 Joda-Time 是正确的。现在已经很久了。今天使用

    Instant iStart = Instant.parse(dtStart);

是的,就是这么简单。您的字符串采用 ISO 8601 格式,并且来自java.time现代 Java 日期和时间 API 的类在没有任何显式格式化程序的情况下解析 ISO 8601。Instant只是这些课程之一。

编辑:问题:需要 android API 26 - 支持旧版本怎么样?

是的,java.time在较旧和较新的 Android 设备上运行良好。它只需要至少 Java 6

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

链接

于 2018-05-23T06:57:21.960 回答
2

您可以使用Java 的 SimpleDateFormat 解析方法或使用JodaTime 的 DateTimeFormat创建 DateTimeFormatter 并相应地解析为 DateTime 对象

于 2010-10-15T10:31:48.730 回答
0

如果您使用 currentjava.timethreetenbp只是像这样解析它:

ZonedDateTime dt = ZonedDateTime.parse(dtStart);

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

于 2020-02-23T18:41:37.773 回答
-1

假设您想在给定列分隔值的情况下计算时间差。
完成--> 15:24:04
开始--> 09:27:37
不使用DateSimpleDateFormat,我这样做了:

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");
于 2018-05-23T05:19:48.530 回答