UTCdateTimeをDBに保存する必要があります。
特定のタイムゾーンで指定されたdateTimeをUTCに変換しました。そのために私は以下のコードに従いました。
入力dateTimeは「2012122510:00:00Z」です。タイムゾーンは「Asia / Calcutta」です。
サーバー/ DB(oracle)は同じタイムゾーン(IST)「Asia / Calcutta」で実行されています。
この特定のタイムゾーンでDateオブジェクトを取得します
String date = "20121225 10:00:00 Z";
String timeZoneId = "Asia/Calcutta";
TimeZone timeZone = TimeZone.getTimeZone(timeZoneId);
DateFormat dateFormatLocal = new SimpleDateFormat("yyyyMMdd HH:mm:ss z");
//This date object is given time and given timezone
java.util.Date parsedDate = dateFormatLocal.parse(date + " "
+ timeZone.getDisplayName(false, TimeZone.SHORT));
if (timeZone.inDaylightTime(parsedDate)) {
// We need to re-parse because we don't know if the date
// is DST until it is parsed...
parsedDate = dateFormatLocal.parse(date + " "
+ timeZone.getDisplayName(true, TimeZone.SHORT));
}
//assigning to the java.sql.TimeStamp instace variable
obj.setTsSchedStartTime(new java.sql.Timestamp(parsedDate.getTime()));
DBに保存
if (tsSchedStartTime != null) {
stmt.setTimestamp(11, tsSchedStartTime);
} else {
stmt.setNull(11, java.sql.Types.DATE);
}
出力
DB(oracle)はdateTime: "20121225 10:00:00
、UTCではなく同じものを保存しています。
以下のSQLから確認しました。
select to_char(sched_start_time, 'yyyy/mm/dd hh24:mi:ss') from myTable
私のDBサーバーも同じタイムゾーン「アジア/カルカッタ」で実行されています
それは私に以下の外観を与えます
Date.getTime()
UTCではありません- または、タイムスタンプはDBに保存するときにタイムゾーンに影響を与えます。ここで何が間違っていますか?
もう1つの質問:
のtimeStamp.toString()
ようにローカルタイムゾーンで印刷java.util.date
しますか?UTCではありませんか?