我有一个字符串,它是从Web服务返回的标准ISO 8601格式的日期/时间。
String dtStart = "2010-10-15T09:27:37Z"
我该如何将这个时间转换为 Time 或 Date 对象?我最初想以不同的格式输出它,但稍后可能需要对其进行其他操作(例如可能会使用不同的格式)。
谢谢
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();
}
yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
。 - Manohar这个问题是在2010年提出的,当时使用SimpleDateFormat
或Joda-Time是你应该使用的工具。现在已经过去了很长时间。今天我们可以使用
Instant iStart = Instant.parse(dtStart);
java.time
的类可以在没有任何显式格式化程序的情况下解析ISO 8601。其中Instant
只是这些类之一。java.time
在旧版和新版Android设备上都能正常工作。它只需要至少Java6.
org.threeten.bp
子包导入日期和时间类。java.time
。java.time
。java.time
后备到Java 6和7(JSR-310的ThreeTen)。java.time
或threetenbp
,只需按照以下方式解析即可:ZonedDateTime dt = ZonedDateTime.parse(dtStart);
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");
java.time
, 现代的Java日期和时间API。 - Ole V.V.Instant.parse("2010-10-15T09:27:37Z")
。请参见Ole V.V.的正确答案。 - Basil Bourque