Java 如何将YYYY-MM-DDTHH:MM:ss.SSSZ格式的时间转换为默认时区?

Java 如何将YYYY-MM-DDTHH:MM:ss.SSSZ格式的时间转换为默认时区?,java,android,timezone,Java,Android,Timezone,我得到的时间格式是“2011-07-31T08:16:37.733Z”。实际上Z应该是时区,然后该时间被转换为本地时区。现在如何将这个时间转换为默认时区 RFC 3339描述了日期/时间表示的特定“配置文件” private static SimpleDateFormat DATE_TIME_FORMAT=new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); DATE_TIME_FORMAT.setTimeZone(TimeZone.getID()

我得到的时间格式是“2011-07-31T08:16:37.733Z”。实际上Z应该是时区,然后该时间被转换为本地时区。现在如何将这个时间转换为默认时区

RFC 3339描述了日期/时间表示的特定“配置文件”

private static SimpleDateFormat DATE_TIME_FORMAT=new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");

DATE_TIME_FORMAT.setTimeZone(TimeZone.getID()); //for example
date=DATE_TIME_FORMAT.format(curDate);
如果使用第三方开源库是一种选择,那么看看Joda Time的实用程序类

否则,如果您需要推出自己的代码,那么使用
SimpleDateFormat
是不够的,因为ISO 8601/RFC 3339表示时区信息的方式

如果您只需要在“Z”(Zulu或UTC)中解析,那么它就相对简单:

String input = "2011-08-11T01:23:45.678Z";
TimeZone utc = TimeZone.getTimeZone("UTC");
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
f.setTimeZone(utc);
GregorianCalendar cal = new GregorianCalendar(utc);
cal.setTime(f.parse(input));
System.out.println(cal.getTime());
应该在当地时区打印“2011-08-11T01:23:45.678Z”


如果您需要在RFC3339中处理任意时区,那么您需要扩展上述功能,以解析出时区指示符并检索相应的Java
timezone
实例。如果只是整小时+/-GMT,这应该不会太难,但如果是非标准偏移,您可能必须创建自己的
SimpleTimeZone
实例。

我已经提到了日期即将到来的格式。该日期为RFC3339格式。如果你有任何关于如何解析RFC3339日期的想法,请让我知道。上面编辑过,有帮助吗?这可能有助于: