【发布时间】:2011-04-25 21:02:09
【问题描述】:
我有一个标准 ISO 8601 格式的字符串,其中包含从 Web 服务返回的日期/时间,如下所示:
String dtStart = "2010-10-15T09:27:37Z"
如何将其放入时间或日期等对象中?我最初想以不同的格式输出它,但以后需要用它做其他事情(即可能以不同的格式使用)。
干杯
【问题讨论】:
标签: java android parsing iso8601
我有一个标准 ISO 8601 格式的字符串,其中包含从 Web 服务返回的日期/时间,如下所示:
String dtStart = "2010-10-15T09:27:37Z"
如何将其放入时间或日期等对象中?我最初想以不同的格式输出它,但以后需要用它做其他事情(即可能以不同的格式使用)。
干杯
【问题讨论】:
标签: java android parsing iso8601
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();
}
这就是你要找的。有existing post关于这个问题。
【讨论】:
yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
这个问题是在 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(JSR-310 的 ThreeTen)的反向移植。【讨论】:
您可以使用Java's SimpleDateFormat parse method 或使用JodaTime's DateTimeFormat 相应地创建一个DateTimeFormatter 和parse to a DateTime object
【讨论】:
如果您使用当前的java.time 或threetenbp,只需像这样解析它:
ZonedDateTime dt = ZonedDateTime.parse(dtStart);
现在您可以访问日期和时间值,例如年、月、小时等。
【讨论】:
假设您想在给定列分隔值的情况下计算时间差。
完成 --> 15:24:04
开始 --> 09:27:37
不使用 Date 和 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");
【讨论】:
Date 这样过时的类和麻烦的SimpleDateFormat 是好的,但我们有库方法,不仅可以使工作更容易,而且代码更清晰,更不容易出错。看看java.time, the modern Java date and time API。
Instant.parse( "2010-10-15T09:27:37Z" )。请参阅 Ole V.V. 的 correct Answer