UTC dateTime을 DB에 저장해야합니다.
특정 시간대에 지정된 dateTime을 UTC로 변환했습니다. 이를 위해 아래 코드를 따랐습니다.
내 입력 dateTime은 "20121225 10:00:00 Z"입니다. 시간대는 "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 서버도 동일한 시간대 "Asia / Calcutta"에서 실행됩니다.
다음과 같은 모습을 보여줍니다.
Date.getTime()
UTC가 아닙니다.- 또는 Timestamp는 DB에 저장하는 동안 시간대에 영향을 미칩니다. 여기서 내가 뭘 잘못하고 있습니까?
질문 하나 더 :
윌 timeStamp.toString()
같은 지역의 시간대로 인쇄 java.util.date
합니까? UTC가 아닙니까?