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

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

Возможно что-то с часовыми поясами, но почему глюк только при переходе через 00 часов?
Вероятно здесь что-то очень простое, но не понимаю что.
...
Рейтинг: 0 / 0
28.08.2019, 12:09
    #39854560
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с типом Time
sergnn,
преобразуй в запросе время в строку в нужном фомате
...
Рейтинг: 0 / 0
28.08.2019, 12:13
    #39854562
sergnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с типом Time
вадя,
Мда? Я получаю данные через объект JPA? Там как поменять?
...
Рейтинг: 0 / 0
28.08.2019, 14:05
    #39854649
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с типом Time
sergnnМда? Я получаю данные через объект JPA? Там как поменять?
sergnnВ java этот тип отображается на java.sql.time
ну дак будешь иметь дело с уже готовой строкой и просто отправишь её юзеру
...
Рейтинг: 0 / 0
28.08.2019, 14:10
    #39854653
sergnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с типом Time
вадя,
А от юзера данные тоже перелопачивать в этот кривой формат?
Криво всё это...
...
Рейтинг: 0 / 0
28.08.2019, 14:15
    #39854658
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с типом Time
sergnnЯ получаю данные через объект JPA? Там как поменять?
- в чем суть проблемы не ясно (возможно настройки БД, проблемный JDBC-драйвер, настройки локализации и т п), но если надо через JPA "руками" данные конвертнуть, то @Convert
...
Рейтинг: 0 / 0
28.08.2019, 14:53
    #39854684
sergnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с типом Time
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
28.08.2019, 14:55
    #39854687
sergnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с типом Time
Kachalov,
Если делать эти запросы в самой базе, то результаты правильные.
Но там соединение идёт по ODBC
...
Рейтинг: 0 / 0
28.08.2019, 15:08
    #39854695
sergnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с типом Time
Kachalov,

Извиняюсь, с последними двумя постами ошибся.
...
Рейтинг: 0 / 0
28.08.2019, 15:20
    #39854705
sergnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с типом Time
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
28.08.2019, 15:25
    #39854709
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с типом Time
Одному мне кажется, что проблемы с преобразованием форматов на стороне сервера к Java вообще никого отношения не имеют?

Читать доку по SQL серверу, как правильно преобразоывать строки в тип времени
...
Рейтинг: 0 / 0
28.08.2019, 15:48
    #39854719
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с типом Time
Сильно напоминает "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
28.08.2019, 16:03
    #39854733
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с типом Time
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
28.08.2019, 16:03
    #39854734
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с типом Time
если драйвер 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
28.08.2019, 16:16
    #39854746
sergnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с типом Time
Leonid Kudryavtsev,

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

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

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
28.08.2019, 16:59
    #39854783
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с типом Time
А если:
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
28.08.2019, 17:09
    #39854791
sergnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с типом Time
Leonid Kudryavtsev,
Лечить, честно говоря, лениво. Да и всё равно получится криво.
Видимо придётся в базе храните в стрингах.
И преобразовывать в Time уже в приложении.
Конечно тоже криво, но значительно быстрее.
...
Рейтинг: 0 / 0
28.08.2019, 17:11
    #39854793
sergnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с типом Time
Leonid KudryavtsevА если:
SELECT CONVERT( time, '00:29:00', 14 )
[/quot]

Насколько помню, команды Convert нет в стандарте SQL.
Там есть Cast.
...
Рейтинг: 0 / 0
28.08.2019, 17:39
    #39854811
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с типом Time
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
29.08.2019, 13:16
    #39855116
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с типом Time
sergnnLeonid Kudryavtsev,
Лечить, честно говоря, лениво. Да и всё равно получится криво.
Видимо придётся в базе храните в стрингах.
И преобразовывать в Time уже в приложении.
Конечно тоже криво, но значительно быстрее.
Завтра вы столкнетесь с новыми "чудесами" и снова сделаете костыль?
Во что превратится ваше ПО через год?
...
Рейтинг: 0 / 0
29.08.2019, 13:17
    #39855117
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с типом Time
sergnnLeonid KudryavtsevА если:
SELECT CONVERT( time, '00:29:00', 14 )


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


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


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

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


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