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

时间:2011-08-10 11:01:02

标签: java android timezone

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

2 个答案:

答案 0 :(得分:12)

RFC 3339描述了日期/时间表示的特定ISO 8601'个人资料'。

如果使用第三方开源库是一种选择,请查看Joda-Time的ISODateTimeFormat实用程序类。

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

如果您需要解析的只是'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”。

如果需要在RFC 3339中处理任意时区,则需要扩展上述内容以解析时区指示符并检索相应的Java TimeZone实例。如果它只是整整几个小时+/- GMT,那应该不会太难,但是如果是非标准的偏移,你可能需要创建自己的SimpleTimeZone实例。

答案 1 :(得分:0)

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);