DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
String dateStr = "2017-03-09T18:30:00.000Z";
Date date = formatter.parse(dateStr);
System.out.println("here");
System.out.println(date);
1 回答
谢谢我知道问题是缺少'Z'。Z 应该用单引号作为 T
不!不!不!
'Z'
在模式中使用会将 makeZ
视为字符文字而不是其预期含义。Z
日期时间字符串中的2017-03-09T18:30:00.000Z
是零时区偏移的时区指示符。它代表 Zulu 并指定Etc/UTC
时区(时区偏移量为+00:00
小时)。
此外,现代日期时间 API * 基于ISO 8601DateTimeFormatter
,只要日期时间字符串符合 ISO 8601 标准,就不需要明确使用对象。
演示:
import java.time.Instant;
public class Main {
public static void main(String[] args) {
Instant instant = Instant.parse("2017-03-09T18:30:00.000Z");
System.out.println(instant);
}
}
输出:
2017-03-09T18:30:00Z
出于任何原因,如果您需要将此对象转换Instant
为 的对象java.util.Date
,您可以执行以下操作:
Date date = Date.from(instant);
从Trail: Date Time了解有关现代日期时间 API 的更多信息。
使用旧版 API:
旧的日期时间 API(java.util
日期时间类型及其格式类型SimpleDateFormat
)已过时且容易出错。建议完全停止使用它并切换到java.time
现代日期时间 API。只是为了完整起见,我在下面使用旧的日期时间 API 编写了一个解决方案。
用于X
处理Z
您的日期时间字符串。查看文档页面以了解有关符号的更多信息。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class Main {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("y-M-d'T'H:m:s.SSSX", Locale.ENGLISH);
Date date = sdf.parse("2017-03-09T18:30:00.000Z");
System.out.println(date);// Note: will display date-time in your local timezone
}
}
在我的时区输出:
Thu Mar 09 18:30:00 GMT 2017
请注意,该java.util.Date
对象不是像现代日期时间类型那样的真实日期时间对象;相反,它表示自称为“纪元” January 1, 1970, 00:00:00 GMT
(或 UTC)的标准基准时间以来的毫秒数。当您打印 的对象时java.util.Date
,其toString
方法会返回 JVM 时区中的日期时间,根据此毫秒值计算得出。如果您需要在不同的时区打印日期时间,则需要将时区设置为SimpleDateFormat
并从中获取格式化的字符串,例如
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX", Locale.ENGLISH);
sdf.setTimeZone(TimeZone.getTimeZone("America/New_York"));
System.out.println(sdf.format(date));
* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,则可以使用ThreeTen-Backport,它将大部分java.time功能向后移植到 Java 6 和 7。如果您正在为 Android 项目和 Android API 工作level 仍然不符合 Java-8,请检查Java 8+ APIs available through desugaring和How to use ThreeTenABP in Android Project。