我有一个标准ISO 8601格式的字符串,其中包含从Web服务返回的日期/时间,如下所示:
String dtStart = "2010-10-15T09:27:37Z"
如何将其转换为时间或日期等对象?我最初想要以不同的格式输出它,但是稍后需要用它来做其他的事情(也许可以使用不同的格式)。
干杯
答案 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
只是其中一个类。
是的,java.time
适用于较旧和较新的Android设备。它只需要至少Java 6 。
org.threeten.bp
导入日期和时间类。java.time
。java.time
。java.time
向Java 6和7的后端(JST-310的ThreeTen)。答案 2 :(得分:2)
您可以使用Java's SimpleDateFormat parse method或使用JodaTime's DateTimeFormat创建DateTimeFormatter并相应地parse to a DateTime object
答案 3 :(得分:0)
如果您使用当前的java.time
或threetenbp
,只需像这样解析它:
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");