UTC dateTime を DB に保存する必要があります。
特定のタイムゾーンで指定された dateTime を UTC に変換しました。そのために、以下のコードに従いました。
私の入力dateTimeは「20121225 10:00:00 Z」です。タイムゾーンは「アジア/カルカッタ」です。
サーバー/DB(オラクル)は同じタイムゾーン(IST)「アジア/カルカッタ」で実行されています。
この特定のタイムゾーンで 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);
}
出力
dateTime: "20121225 10:00:00
DB(オラクル)はUTCではなく同じものを保存しています。
以下のSQLから確認しました。
select to_char(sched_start_time, 'yyyy/mm/dd hh24:mi:ss') from myTable
私のDBサーバーも同じタイムゾーン「アジア/カルカッタ」で実行されています
それは私に以下の外観を与えます
Date.getTime()
はUTCではありません- または、Timestamp は DB への保存中にタイムゾーンに影響を与えます。ここで何が間違っていますか?
もう 1 つの質問:
timeStamp.toString()
のようにローカルタイムゾーンで印刷されjava.util.date
ますか? UTC ではないのですか?