Время getTime не возвращает хорошее значение

1

В моей программе мне нужно прочитать значение времени из базы данных и затем преобразовать это значение в миллисекунды. Я делаю это так:

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 час раньше).

Заранее спасибо.

  • 0
    В БД нет 9:30 вообще. В БД указано количество миллисекунд, а 9:30 - просто отформатированное значение. Упомянутое форматирование основано на часовом поясе, в БД будет один и, возможно, один на клиентском соединении, используемый для отображения данных.
  • 0
    Я перечитал ваш вопрос. Дело в том, что для вашего TZ правильное значение для 09:30:00 - 30600000. Используйте UTC в качестве TZ, если это ваша точка.
Показать ещё 1 комментарий
Теги:
timezone
time

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню