powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблема с типом Time
25 сообщений из 29, страница 1 из 2
Проблема с типом Time
    #39854535
sergnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица с колонкой типа time (база: sybase asa)
В приложении получаю данные из этой колонки
всё норм, пока час не равно 00
То есть любое другое время отображается правильно,а вот например 00:29 отображается как 23:29,
то есть на час меньше.
Повторяю, во всех остальных случаях время отображается правильно.

В java этот тип отображается на java.sql.time

Возможно что-то с часовыми поясами, но почему глюк только при переходе через 00 часов?
Вероятно здесь что-то очень простое, но не понимаю что.
...
Рейтинг: 0 / 0
Проблема с типом Time
    #39854560
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergnn,
преобразуй в запросе время в строку в нужном фомате
...
Рейтинг: 0 / 0
Проблема с типом Time
    #39854562
sergnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя,
Мда? Я получаю данные через объект JPA? Там как поменять?
...
Рейтинг: 0 / 0
Проблема с типом Time
    #39854649
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergnnМда? Я получаю данные через объект JPA? Там как поменять?
sergnnВ java этот тип отображается на java.sql.time
ну дак будешь иметь дело с уже готовой строкой и просто отправишь её юзеру
...
Рейтинг: 0 / 0
Проблема с типом Time
    #39854653
sergnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя,
А от юзера данные тоже перелопачивать в этот кривой формат?
Криво всё это...
...
Рейтинг: 0 / 0
Проблема с типом Time
    #39854658
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergnnЯ получаю данные через объект JPA? Там как поменять?
- в чем суть проблемы не ясно (возможно настройки БД, проблемный JDBC-драйвер, настройки локализации и т п), но если надо через JPA "руками" данные конвертнуть, то @Convert
...
Рейтинг: 0 / 0
Проблема с типом Time
    #39854684
sergnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalov,
JPA ту видимо не при делах.
Если просто делаю:
Код: java
1.
2.
3.
4.
5.
 
Statement st = connection.createStatement();
ResultSet rs = st.executeQuery("select '00:29:00' ");
ResultSet rs = st.executeQuery("select '23:29:00' ");
if (rs.next()) 	Time result = rs.getTime(1);



result в обоих случаях 23:29:00

разве что на самом деле JDBC драйвер дурит...
...
Рейтинг: 0 / 0
Проблема с типом Time
    #39854687
sergnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalov,
Если делать эти запросы в самой базе, то результаты правильные.
Но там соединение идёт по ODBC
...
Рейтинг: 0 / 0
Проблема с типом Time
    #39854695
sergnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalov,

Извиняюсь, с последними двумя постами ошибся.
...
Рейтинг: 0 / 0
Проблема с типом Time
    #39854705
sergnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalov,

мда. Как раз с предыдущем примером все норм. А вот если так:
Код: java
1.
2.
3.
4.
Statement st = connection.createStatement();
ResultSet rs = st.executeQuery("select cast('00:29:00' as time) ");
ResultSet rs = st.executeQuery("select cast('23:29:00' as time) ");
if (rs.next()) 	Time result = rs.getTime(1);



Вот тут и получаем в обоих случаях 23:29
...
Рейтинг: 0 / 0
Проблема с типом Time
    #39854709
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одному мне кажется, что проблемы с преобразованием форматов на стороне сервера к Java вообще никого отношения не имеют?

Читать доку по SQL серверу, как правильно преобразоывать строки в тип времени
...
Рейтинг: 0 / 0
Проблема с типом Time
    #39854719
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сильно напоминает "You might receive unexpected results in JDBC and SQLJ applications if you use date, time, and timestamp values that do not correspond to real dates and times." ( C ) какая-то документация

поскольку нифига не понятно, что же именно сохранено в базе (да и какая собственно база и дравера), думаю, что-то большее угадать по хрустальному шару крайне тяжело
...
Рейтинг: 0 / 0
Проблема с типом Time
    #39854733
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergnn,
а так
Код: java
1.
2.
3.
Statement st = connection.createStatement();
ResultSet rs = st.executeQuery("select cast('00:29:00' as time) ");
if (rs.next()) 	Time result = rs.getTime(1);
...
Рейтинг: 0 / 0
Проблема с типом Time
    #39854734
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если драйвер jConnect, то пальцем в небо можно попытаться "Set the connection option RETURN_DATE_TIME_AS_STRING to ON in order to get SQL Anywhere to always return DATE/TIME/TIMESTAMP values as strings. "
по крайне мере, проще будет тестить, что же именно приходит от сервера и что же именно хранится в базе

IMHO
...
Рейтинг: 0 / 0
Проблема с типом Time
    #39854746
sergnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

В общем прояснилось:
почему то 00:29 из базы воспринимается как 23:29 31 декабря 1969 года
а вот Time.valueOf("00:29:00") воспринимается как 00:29 1 января 1970 года.

Сия тайна велика есть...
...
Рейтинг: 0 / 0
Проблема с типом Time
    #39854760
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выличить удалось? Если да, то как?

sergnn...воспринимается как 23:29 31 декабря 1969 года...

JavaDocpublic class Time
extends Date

A thin wrapper around the java.util.Date class that allows the JDBC API to identify this as an SQL TIME value. The Time class adds formatting and parsing operations to support the JDBC escape syntax for time values.

The date components should be set to the "zero epoch" value of January 1, 1970 and should not be accessed .
...
Рейтинг: 0 / 0
Проблема с типом Time
    #39854783
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если:
SELECT CONVERT( time, '00:29:00', 14 )
?

Вообще, все больше кажется. что проблема с тайм-зоной (зимнее/летнее время). Но тогда "падеж падежей" у Вас должен быть на всех константах, не только на 0:29.

To define a time you need the time and the time zone. A time stamp is the time which passed since
January 1, 1970, 00:00:00 GMT. So a time stamp is well defined and should not be changed in anyway when its written to the database.
Otherwise you end up with that strange situation that time stamp 0 is not January 1, 1970, 00:00:00 GMT.
...
Рейтинг: 0 / 0
Проблема с типом Time
    #39854791
sergnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,
Лечить, честно говоря, лениво. Да и всё равно получится криво.
Видимо придётся в базе храните в стрингах.
И преобразовывать в Time уже в приложении.
Конечно тоже криво, но значительно быстрее.
...
Рейтинг: 0 / 0
Проблема с типом Time
    #39854793
sergnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid KudryavtsevА если:
SELECT CONVERT( time, '00:29:00', 14 )
[/quot]

Насколько помню, команды Convert нет в стандарте SQL.
Там есть Cast.
...
Рейтинг: 0 / 0
Проблема с типом Time
    #39854811
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergnnТам есть Cast.
CAST это кастование из одного типа в другой.

Кастовать строчки, без явного указания формата.... "гарантию может дать только страховой полис". Т.к., вообще то, используемый формат может зависит от настроект базы/клиента/соединения/страны (часового пояса)

sergnnВидимо придётся в базе храните в стрингах.
И преобразовывать в Time уже в приложении
мне года 4-и назад, ровно так и пришлось поступить
https://www.sql.ru/forum/1187891/jdbc-postgres-java-time-zoneddatetime?hl=timezone postgresql

обычно со строками только одна проблема - сортировка в базе, но для чисто времени: что time, что varchar - будет сортировать (и даже сравнивать) правильно. Т.ч., в общем-то и пофиг.

А с учетом, как через ж.... в Java сделаны типы с датой, возможно хранить в varchar это и хорошо (надежнее).
...
Рейтинг: 0 / 0
Проблема с типом Time
    #39855116
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergnnLeonid Kudryavtsev,
Лечить, честно говоря, лениво. Да и всё равно получится криво.
Видимо придётся в базе храните в стрингах.
И преобразовывать в Time уже в приложении.
Конечно тоже криво, но значительно быстрее.
Завтра вы столкнетесь с новыми "чудесами" и снова сделаете костыль?
Во что превратится ваше ПО через год?
...
Рейтинг: 0 / 0
Проблема с типом Time
    #39855117
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergnnLeonid KudryavtsevА если:
SELECT CONVERT( time, '00:29:00', 14 )


Насколько помню, команды Convert нет в стандарте SQL.
Там есть Cast.[/quote]
Есть такая команда.
...
Рейтинг: 0 / 0
Проблема с типом Time
    #39855119
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL2008sergnnпропущено...


Насколько помню, команды Convert нет в стандарте SQL.
Там есть Cast.
Есть такая команда.[/quote]
Сорри - база: sybase asa - про неё не скажу. Имел в виду MS SQL
...
Рейтинг: 0 / 0
Проблема с типом Time
    #39855219
sergnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL2008SQL2008пропущено...


Насколько помню, команды Convert нет в стандарте SQL.
Там есть Cast.
Есть такая команда.
Сорри - база: sybase asa - про неё не скажу. Имел в виду MS SQL[/quot]

В sybase asa как раз Convert есть. И в MS SQL есть , поскольку он наследник sybase'а.
А вот в стандарте SQL увы и ах.
Поскольку в плане у нас переход в Postgre SQL, то стараемся не умножать сущности сверх необходимого.
...
Рейтинг: 0 / 0
Проблема с типом Time
    #39855221
sergnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL2008sergnnLeonid Kudryavtsev,
Лечить, честно говоря, лениво. Да и всё равно получится криво.
Видимо придётся в базе храните в стрингах.
И преобразовывать в Time уже в приложении.
Конечно тоже криво, но значительно быстрее.
Завтра вы столкнетесь с новыми "чудесами" и снова сделаете костыль?
Во что превратится ваше ПО через год?
Предложите решение проблемы.
Вы предлагаете на каждом этапе анализировать час и если 00 то отнимать один час?
Но это ещё больший костыль.
Или хранить время как дату с произвольной собственно датой?
Тоже костыль ещё тот.
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблема с типом Time
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]