|
Проблема с типом Time
|
|||
---|---|---|---|
#18+
Есть таблица с колонкой типа time (база: sybase asa) В приложении получаю данные из этой колонки всё норм, пока час не равно 00 То есть любое другое время отображается правильно,а вот например 00:29 отображается как 23:29, то есть на час меньше. Повторяю, во всех остальных случаях время отображается правильно. В java этот тип отображается на java.sql.time Возможно что-то с часовыми поясами, но почему глюк только при переходе через 00 часов? Вероятно здесь что-то очень простое, но не понимаю что. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2019, 11:32 |
|
Проблема с типом Time
|
|||
---|---|---|---|
#18+
sergnn, преобразуй в запросе время в строку в нужном фомате ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2019, 12:09 |
|
Проблема с типом Time
|
|||
---|---|---|---|
#18+
вадя, Мда? Я получаю данные через объект JPA? Там как поменять? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2019, 12:13 |
|
Проблема с типом Time
|
|||
---|---|---|---|
#18+
sergnnМда? Я получаю данные через объект JPA? Там как поменять? sergnnВ java этот тип отображается на java.sql.time ну дак будешь иметь дело с уже готовой строкой и просто отправишь её юзеру ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2019, 14:05 |
|
Проблема с типом Time
|
|||
---|---|---|---|
#18+
вадя, А от юзера данные тоже перелопачивать в этот кривой формат? Криво всё это... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2019, 14:10 |
|
Проблема с типом Time
|
|||
---|---|---|---|
#18+
sergnnЯ получаю данные через объект JPA? Там как поменять? - в чем суть проблемы не ясно (возможно настройки БД, проблемный JDBC-драйвер, настройки локализации и т п), но если надо через JPA "руками" данные конвертнуть, то @Convert ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2019, 14:15 |
|
Проблема с типом Time
|
|||
---|---|---|---|
#18+
Kachalov, JPA ту видимо не при делах. Если просто делаю: Код: java 1. 2. 3. 4. 5.
result в обоих случаях 23:29:00 разве что на самом деле JDBC драйвер дурит... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2019, 14:53 |
|
Проблема с типом Time
|
|||
---|---|---|---|
#18+
Kachalov, Если делать эти запросы в самой базе, то результаты правильные. Но там соединение идёт по ODBC ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2019, 14:55 |
|
Проблема с типом Time
|
|||
---|---|---|---|
#18+
Kachalov, Извиняюсь, с последними двумя постами ошибся. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2019, 15:08 |
|
Проблема с типом Time
|
|||
---|---|---|---|
#18+
Kachalov, мда. Как раз с предыдущем примером все норм. А вот если так: Код: java 1. 2. 3. 4.
Вот тут и получаем в обоих случаях 23:29 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2019, 15:20 |
|
Проблема с типом Time
|
|||
---|---|---|---|
#18+
Одному мне кажется, что проблемы с преобразованием форматов на стороне сервера к Java вообще никого отношения не имеют? Читать доку по SQL серверу, как правильно преобразоывать строки в тип времени ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2019, 15:25 |
|
Проблема с типом Time
|
|||
---|---|---|---|
#18+
Сильно напоминает "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 ) какая-то документация поскольку нифига не понятно, что же именно сохранено в базе (да и какая собственно база и дравера), думаю, что-то большее угадать по хрустальному шару крайне тяжело ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2019, 15:48 |
|
Проблема с типом Time
|
|||
---|---|---|---|
#18+
sergnn, а так Код: java 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2019, 16:03 |
|
Проблема с типом Time
|
|||
---|---|---|---|
#18+
если драйвер 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2019, 16:03 |
|
Проблема с типом Time
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, В общем прояснилось: почему то 00:29 из базы воспринимается как 23:29 31 декабря 1969 года а вот Time.valueOf("00:29:00") воспринимается как 00:29 1 января 1970 года. Сия тайна велика есть... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2019, 16:16 |
|
Проблема с типом Time
|
|||
---|---|---|---|
#18+
Выличить удалось? Если да, то как? 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 . ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2019, 16:32 |
|
Проблема с типом Time
|
|||
---|---|---|---|
#18+
А если: 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. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2019, 16:59 |
|
Проблема с типом Time
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Лечить, честно говоря, лениво. Да и всё равно получится криво. Видимо придётся в базе храните в стрингах. И преобразовывать в Time уже в приложении. Конечно тоже криво, но значительно быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2019, 17:09 |
|
Проблема с типом Time
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevА если: SELECT CONVERT( time, '00:29:00', 14 ) [/quot] Насколько помню, команды Convert нет в стандарте SQL. Там есть Cast. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2019, 17:11 |
|
Проблема с типом Time
|
|||
---|---|---|---|
#18+
sergnnТам есть Cast. CAST это кастование из одного типа в другой. Кастовать строчки, без явного указания формата.... "гарантию может дать только страховой полис". Т.к., вообще то, используемый формат может зависит от настроект базы/клиента/соединения/страны (часового пояса) sergnnВидимо придётся в базе храните в стрингах. И преобразовывать в Time уже в приложении мне года 4-и назад, ровно так и пришлось поступить https://www.sql.ru/forum/1187891/jdbc-postgres-java-time-zoneddatetime?hl=timezone postgresql обычно со строками только одна проблема - сортировка в базе, но для чисто времени: что time, что varchar - будет сортировать (и даже сравнивать) правильно. Т.ч., в общем-то и пофиг. А с учетом, как через ж.... в Java сделаны типы с датой, возможно хранить в varchar это и хорошо (надежнее). ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2019, 17:39 |
|
Проблема с типом Time
|
|||
---|---|---|---|
#18+
sergnnLeonid Kudryavtsev, Лечить, честно говоря, лениво. Да и всё равно получится криво. Видимо придётся в базе храните в стрингах. И преобразовывать в Time уже в приложении. Конечно тоже криво, но значительно быстрее. Завтра вы столкнетесь с новыми "чудесами" и снова сделаете костыль? Во что превратится ваше ПО через год? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2019, 13:16 |
|
Проблема с типом Time
|
|||
---|---|---|---|
#18+
sergnnLeonid KudryavtsevА если: SELECT CONVERT( time, '00:29:00', 14 ) Насколько помню, команды Convert нет в стандарте SQL. Там есть Cast.[/quote] Есть такая команда. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2019, 13:17 |
|
Проблема с типом Time
|
|||
---|---|---|---|
#18+
SQL2008sergnnпропущено... Насколько помню, команды Convert нет в стандарте SQL. Там есть Cast. Есть такая команда.[/quote] Сорри - база: sybase asa - про неё не скажу. Имел в виду MS SQL ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2019, 13:19 |
|
Проблема с типом Time
|
|||
---|---|---|---|
#18+
SQL2008SQL2008пропущено... Насколько помню, команды Convert нет в стандарте SQL. Там есть Cast. Есть такая команда. Сорри - база: sybase asa - про неё не скажу. Имел в виду MS SQL[/quot] В sybase asa как раз Convert есть. И в MS SQL есть , поскольку он наследник sybase'а. А вот в стандарте SQL увы и ах. Поскольку в плане у нас переход в Postgre SQL, то стараемся не умножать сущности сверх необходимого. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2019, 15:15 |
|
Проблема с типом Time
|
|||
---|---|---|---|
#18+
SQL2008sergnnLeonid Kudryavtsev, Лечить, честно говоря, лениво. Да и всё равно получится криво. Видимо придётся в базе храните в стрингах. И преобразовывать в Time уже в приложении. Конечно тоже криво, но значительно быстрее. Завтра вы столкнетесь с новыми "чудесами" и снова сделаете костыль? Во что превратится ваше ПО через год? Предложите решение проблемы. Вы предлагаете на каждом этапе анализировать час и если 00 то отнимать один час? Но это ещё больший костыль. Или хранить время как дату с произвольной собственно датой? Тоже костыль ещё тот. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2019, 15:17 |
|
|
start [/forum/topic.php?fid=59&msg=39854733&tid=2121147]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
144ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 257ms |
0 / 0 |