私はjavaで単純な文字列から日付への変換を行っていますが、気になる変換を行う必要があるのはGMTでなければなりません。 GMTで文字列を変換できます。しかし、その日付をタイムスタンプに変換しようとすると、私は別の価値を持っていました(私のローカルタイムゾーンに基づいているようです)。Java日付タイムスタンプ変換の問題
public static void timeFun(String str) throws ParseException {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
String dateInString = "2015-07-10T09:54:31.000-04:00";
Date date = formatter.parse(dateInString);
SimpleDateFormat sdfAmerica = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
TimeZone tz = TimeZone.getTimeZone("GMT");
sdfAmerica.setTimeZone(tz);
String convertedDate = sdfAmerica.format(date); // Convert to String
// first
Date dateInGMT = sdfAmerica.parse(convertedDate);
System.out.println(convertedDate); // Output = 2015-07-10T13:54:31.000Z (Right)
Timestamp timestamp = new java.sql.Timestamp(dateInGMT.getTime());
System.out.println(timestamp); // Output = 2015-07-10 19:24:31.0 (Wrong)
}
日付とタイムスタンプのクラスは、タイムゾーンを持っていない - 彼らは唯一のエポックからのミリ秒数を表します。それらのtoStringメソッドは、あなたのマシンの設定に基づいていくつかの変換を行うかもしれませんが、オブジェクトの内部状態には影響しません。タイムスタンプを使用する場合は、おそらくデータベースと対話したいと思うでしょうし、データベース列にタイムゾーンがある場合、結果は期待どおりになります(13:54GMTまたはそれに相当する瞬間)。 – assylias