SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US);
try {
Date date = df.parse("2014-06-10T13:37:17.744Z");
dateString = android.text.format.DateFormat.format("MMM d, yyyy, h:mm a", date)
.toString();
} catch (ParseException e) {
e.printStackTrace();
}
java.text.ParseException:无法解析的日期:“2014-06-10T13:37:17.744Z”
你还有毫秒:
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ", Locale.US);
java.time
2014 年 3 月,Java 8 引入了现代的
java.time
日期时间 API,取代了容易出错的旧版java.util
日期时间 API。任何新代码都应使用 java.time
API。
'Z'
与 Z
'Z'
只是一个字符文字,而 Z
是零时区偏移量的 时区指示符。它代表祖鲁语并指定 Etc/UTC
时区(时区偏移为 +00:00
小时)。
因此,不要在模式
中使用'Z'
进行解析/格式化。
您的日期时间字符串采用 ISO 8601 格式,这也是
java.time
类型默认使用的格式。因此,您不需要明确使用 DateTimeFormatter
,例如
Instant instant = Instant.parse("2014-06-10T13:37:17.744Z");
ZonedDateTime zdt = ZonedDateTime.parse("2014-06-10T13:37:17.744Z");
OffsetDateTime odt = OffsetDateTime.parse("2014-06-10T13:37:17.744Z");
演示:
class Main {
public static void main(String args[]) {
ZonedDateTime zdt = ZonedDateTime.parse("2014-06-10T13:37:17.744Z");
System.out.println(zdt);
// String representation in a custom format
String formatted = zdt.format(
DateTimeFormatter.ofPattern("MMM d, uuuu, h:mm a", Locale.ENGLISH));
System.out.println(formatted);
}
}
输出:
2014-06-10T13:37:17.744Z
Jun 10, 2014, 1:37 PM
注意: 如果由于某种原因,您需要
java.util.Date
的实例,请让 java.time
API 完成解析日期时间字符串的繁重工作,并将上述代码中的 zdt
转换为 java.util.Date
实例使用 Date.from(zdt.toInstant())
。
了解有关现代日期时间 API 的更多信息
一些重要链接:
java.time
API 与 JDBC。Locale