4

我在我的程序中做这样的事情:

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

o/p:

2012 年 5 月 29 日星期二 13:17:04 CDT

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

4

1 回答 1

4

您的时区 - 程序运行时的默认时区与 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);
   }
}
于 2012-05-29T19:25:20.960 回答