4

私は私のプログラムでこのようなことをしています:

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

o / p:

5月29日火曜日13:17:04CDT2012

結果が13:17:04の時間を示しているのはなぜですか。入力では、11:17:04と太平洋標準時のタイムゾーン-07:00を指定しました。11:17:04を印刷するべきではありませんか?

4

1 に答える 1

4

あなたのタイムゾーン - プログラムが実行されているときのデフォルトは、 DatatypeConverter.parseDateTime() メソッドに指定されたタイムゾーンとは異なり、 cal.getTime().toString() メソッドはデフォルトのタイムゾーンを使用して日付をフォーマットしました。

Date.toString() を使用して Date をフォーマットしないでください。Date はエポック時間からのミリ秒しか知りません。代わりに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 に答える