В моей программе мне нужно прочитать значение времени из базы данных и затем преобразовать это значение в миллисекунды. Я делаю это так:
Time t = getTimeFromDatabase();
long millis = t.getTime();
Проблема в том, что значение millis
соответствует значению времени, которое на 1 час раньше, чем указано в базе данных.
Например: скажем, что значение в БД составляет 09:30:00. Поэтому, если я это сделаю:
Time t = getTimeFromDatabase();
System.out.println(t.toString);
System.out.println(t.getTime);
Результатом будет:
09:30:00
30600000
Теперь... 09:30:00 все в порядке. Это как в БД.
Но 30600000/3600000 = 8.5
(3600000 - миллисекунды в час). Это означает, что это значение в миллисекундах соответствует 08:30:00.
Правильное значение для 09:30:00 должно быть 34200000.
Мой вопрос заключается в том, как я могу получить правильное значение независимо от часового пояса (я нахожусь в UTC +1, поэтому я предполагаю, что это имеет какое-то отношение к моей проблеме).
Я пробовал с другими значениями времени, но он всегда один и тот же (на 1 час раньше).
Заранее спасибо.
Когда вы анализируете данные из БД в объект времени, вы должны использовать форматтер и установить правильный часовой пояс.
SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
timeFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = timeFormat.parse(dataFromDB); // dataFromDB is a "09:30:10" like String
System.out.println(timeFormat.format(date)); // will print time in HH:mm:ss format
System.out.println(date.getTime()); // will print milliseconds