Muszę przechowywać datę i godzinę UTC w DB.
Przekonwertowałem dateTime podaną w określonej strefie czasowej na UTC. w tym celu postępowałem zgodnie z poniższym kodem.
Moja data wejściowaGodzina to „20121225 10:00:00 Z” strefa czasowa to „Azja / Kalkuta”
Mój serwer / baza danych (Oracle) działa w tej samej strefie czasowej (IST) „Azja / Kalkuta”
Pobierz obiekt Date w tej określonej strefie czasowej
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()));
Przechowuj w DB
if (tsSchedStartTime != null) {
stmt.setTimestamp(11, tsSchedStartTime);
} else {
stmt.setNull(11, java.sql.Types.DATE);
}
WYNIK
DB (oracle) przechowuje to samo, podane dateTime: "20121225 10:00:00
nie w UTC.
Potwierdziłem z poniższego sql.
select to_char(sched_start_time, 'yyyy/mm/dd hh24:mi:ss') from myTable
Mój serwer DB działa również w tej samej strefie czasowej „Asia / Calcutta”
Daje mi poniższe wyglądy
Date.getTime()
nie jest w UTC- Lub Znacznik czasu ma wpływ na strefę czasową podczas zapisywania w DB. Co ja tu robię źle?
Jeszcze jedno pytanie:
Czy będzie timeStamp.toString()
drukować w lokalnej strefie czasowej, tak jak java.util.date
robi? Nie UTC?