您的时区 - 程序运行时的默认时区与 DatatypeConverter.parseDateTime() 方法的时区不同,而 cal.getTime().toString() 方法使用默认时区来格式化日期。
永远不要使用 Date.toString() 来格式化 Date - Date 只知道从 Epoch 时间开始的毫秒数。而是java.text.SimpleDateFormat
像这样使用:
SimpleDateFormat("yyyy-MM-dd HH:mm:ss z").format(dateObject).
import java.util.Calendar;
import java.util.TimeZone;
import java.text.SimpleDateFormat;
import javax.xml.bind.DatatypeConverter;
class TestDate
{
public static void main(String[] args)
{
Calendar cal = DatatypeConverter.parseDateTime("2012-05-29T11:17:04.805-07:00");
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS z");
df.setTimeZone(TimeZone.getTimeZone("GMT-07:00"));
String date = df.format(cal.getTime());
System.out.println(date);
}
}