Я повинен зберігати UTC dateTime у БД.
Я перетворив дату і час, вказані в конкретному часовому поясі, на UTC. для цього я дотримувався наведеного нижче коду.
Моя дата введення Час "20121225 10:00:00 Z" часовий пояс "Азія / Калькутта"
Мій сервер / БД (оракул) працює в тому ж часовому поясі (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()));
Зберігати в БД
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
Мій сервер БД також працює в тому самому часовому поясі "Азія / Калькутта"
Це дає мені наступні види
Date.getTime()
не в UTC- Або Timestamp має вплив на часовий пояс під час зберігання в БД. Що я тут роблю не так?
Ще одне питання:
Буде чи timeStamp.toString()
друкувати в локальній часовій зоні , як java.util.date
робить? Не UTC?