DataTypeConvertor parseDateTime结果

时间:2012-05-29 19:20:28

标签: java

我在我的程序中做了类似的事情:

Calendar cal = DatatypeConverter.parseDateTime("2012-05-29T11:17:04.805-07:00");  
System.out.println(cal.getTime().toString());  

o / p:

  

Tue May 29 13:17:04 CDT 2012

为什么结果显示13:17:04的时间,在我给出的输入11:17:04和时区-07:00这是太平洋时区。它应该打印出来11:17:04吗?

1 个答案:

答案 0 :(得分:2)

您的时区 - 程序运行时的默认值与DatatypeConverter.parseDateTime()方法的时区不同,而cal.getTime()。toString()方法使用默认时区格式化日期。 / p>

永远不要使用Date.toString()来格式化日期 - 日期只知道大纪元时间的毫秒数。而是像这样使用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);
   }
}