#java #sql #time
#java #sql #время
Вопрос:
У меня есть время в миллисекундах, и мне нужно вставить в базу данных Postgresql. Моя проблема в том, что когда я использую конструктор java.sql.Time()
, у меня есть правильное время, но на один час больше!!
Например: если у меня есть 503000 miliseconds
, то new java.sql.Time(503000) = 01:08:23
, когда правильный ответ 00:08:23
Мой код только:
new java.sql.Time(miliseconds);
В чем проблема?? Я кое-что читал о часовом поясе. В этом случае, как я могу это решить??
Мне нужно создать объект Date с этими миллисекундами и вставить в мою базу данных.
MyObject.setDuration(новое время (длительность)); // где setDuration имеет параметр Date
Заранее спасибо
Комментарии:
1. Возможно, значение, которое вы считываете из метки времени, учитывает разницу в часовом поясе и / или переходе на летнее время
2. Правильно ли значение вставляется в базу данных?
3. Да, значение вставлено правильно. И на моей машине указано испанское время.
4. @jjmartinez Итак, возможно, сохраненное время интерпретируется как GMT, и результат, который вы видите, был преобразован в GMT 1. Можете ли вы объяснить, как вы извлекли
01:08:23
значение?5.
toString()
Ofjava.sql.Time
всегда находится в текущем часовом поясе, в то время какlong
значение миллисекунд всегда находится в UTC.
Ответ №1:
java.sql.Time
предназначен для предоставления времени на основе текущего часового пояса, например…
Time ts = new Time(503000);
System.out.println(ts);
System.out.println(ts.getTime());
Выводит
10:08:23
503000
Для меня.
Вы можете дополнительно протестировать это с помощью SimpleDateFormat
….
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss Z");
System.out.println(sdf.format(ts));
Который выводит
10:08:23 1000
Комментарии:
1. Проблема в том, что мне нужно значение даты. У меня есть время в миллисекундах, и я должен вставить в объект Date. На самом деле, я печатаю только для того, чтобы увидеть, какое значение генерируется
2. Могу ли я использовать другой класс для создания объекта Date из длинного значения (миллисекунды)???
3. Лоты. Рассмотрите возможность использования
Calendar
, которое позволит вам изменять свойства даты / времени4. Я использую, наконец, календарь: Calendar cal = new GregorianCalendar(); cal.setTimeInMillis(продолжительность); cal.add(cal.HOUR, -1); MyObject.setDuration(новое время(cal.getTimeInMillis()));
5. Я думаю, вы упускаете весь смысл. Нет необходимости настраивать время, так как оно отображается на основе вашего локального. java.sql.Time расширяется из java.util. Дата, поэтому вы можете использовать, где используется дата. Если вам нужен компонент date, вы не сможете использовать setTimeInMillis
Ответ №2:
Ваш вывод 00:08:23
основан на вашем местном часовом поясе.
Смотрите мой пример здесь;
Time t1 = new java.sql.Time(503000);
System.out.println(t1); //print 06:38:23 - my local timezone
SimpleDateFormat sdfm = new SimpleDateFormat("HH:mm:ss");
sdfm.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(sdfm.format(t1)); //print 00:08:23 - GMT timezone