powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Неправильное прочтение TDateTime из базы
22 сообщений из 22, страница 1 из 1
Неправильное прочтение TDateTime из базы
    #39499609
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В базе MySQL есть поле finish_time типа DATETIME.
Там хранится 2017-07-17 19:01:00.
Но при прочтении finish_time := ADQuery1.FieldByName('finish_time').AsDateTime, в finish_time оказывается значение 2017-07-17 19:00:59.
Из-за этого неправильно высчитывается количество часов и минут между двумя временами.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
function TfmVesselActEdit.CalcTimeProcessed: string;
var
  AllMinutes: extended;
  Hours: integer;
  Minutes: integer;
begin
  if finish_parking = 0 then
    begin
      AllMinutes := 0;
    end
  else
    AllMinutes := MinutesBetween(finish_parking, start_parking);

  Hours := round(AllMinutes) DIV 60;
  Minutes := round(AllMinutes) MOD 60;

  Result := IntToStr(Hours) + ' час. ' + IntToStr(Minutes) + ' мин.';
end;


Т.е. здесь он высчитывает 30 минут. Когда в базе было 2017-07-17 19:00:00, он высчитывал 29 минут, приходится вот к таким ухищрениям прибегать, указывать время на 1 минуту больше, чтобы было 30 минут.
В чем причина?
...
Рейтинг: 0 / 0
Неправильное прочтение TDateTime из базы
    #39499614
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В чем причина? Обычное дело. Округления. С ними часто подобные проблемы.
...
Рейтинг: 0 / 0
Неправильное прочтение TDateTime из базы
    #39499615
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVВ чем причина? Обычное дело. Округления. С ними часто подобные проблемы.
А как быть-то?
...
Рейтинг: 0 / 0
Неправильное прочтение TDateTime из базы
    #39499621
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladLSVпропущено...
Обычное дело. Округления. С ними часто подобные проблемы.
А как быть-то?
Хранить время в целом числе. Например, в https://www.cy-pr.com/tools/time/
...
Рейтинг: 0 / 0
Неправильное прочтение TDateTime из базы
    #39499625
Фотография krapotkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да первый раз слышу чтобы точность TDateTime убегала за 1 секунду
везде написано про миллисекунды. и это действительно так
...
Рейтинг: 0 / 0
Неправильное прочтение TDateTime из базы
    #39499628
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krapotkinпервый раз слышу чтобы точность TDateTime убегала за 1 секунду

В VCL есть подколка с флагами сопроцессора, которые резко понижают точность арифметики,
которая используется для перевода из нормальных форматов в TDateTime.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Неправильное прочтение TDateTime из базы
    #39499636
Фотография krapotkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я какбэ все эти программы писал на VCL. Когда же этот флаг начинает работать?
и что дают варианты:
Код: pascal
1.
2.
3.
4.
d1,d2:double;s:string;
d1 := q.FieldByname('xxx').asDateTime
d2 := q.FieldByname('xxx').asFloat;
s := q.FieldByname('xxx').asFloat;


?
...
Рейтинг: 0 / 0
Неправильное прочтение TDateTime из базы
    #39499644
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krapotkinКогда же этот флаг начинает работать?

Когда какая-нибудь левая библиотека его устанавливает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Неправильное прочтение TDateTime из базы
    #39499648
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krapotkin,
Код: pascal
1.
2.
3.
d1 := q.FieldByname('xxx').asDateTime; //2017-07-17 00:00:00
d2 := q.FieldByname('xxx').asFloat; // 42933,791667
s := q.FieldByname('xxx').asFloat; // ошибка


Не совсем понял, как, зная float значение, проверить, правильно ли осуществился перевод в DateTime.
...
Рейтинг: 0 / 0
Неправильное прочтение TDateTime из базы
    #39499654
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя, в принципе, понял, что хотел сказать.
...
Рейтинг: 0 / 0
Неправильное прочтение TDateTime из базы
    #39499657
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmansvnvladпропущено...

А как быть-то?
Хранить время в целом числе. Например, в https://www.cy-pr.com/tools/time/
Это отразится на работе визуальных элементов типа tcxDateEdit? Или только в базе изменения будут?
...
Рейтинг: 0 / 0
Неправильное прочтение TDateTime из базы
    #39499662
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допустим я завел переменную IntDateTime: integer;
Как в нее теперь прочитать данные типа DATETIME из базы?
И как это целое число запихать в tcxDateEdit?
...
Рейтинг: 0 / 0
Неправильное прочтение TDateTime из базы
    #39499812
Papadopulos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
svnvladДопустим я завел переменную IntDateTime: integer;
Как в нее теперь прочитать данные типа DATETIME из базы?
И как это целое число запихать в tcxDateEdit?
Сказали же вам, поможет только хранение дат в Unix time, ну или string для большей точности. Пока время храниться в DATETIME, погрешности будут
...
Рейтинг: 0 / 0
Неправильное прочтение TDateTime из базы
    #39499876
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может просто компоненты доступа через которые вы забираете данные из БД такой эффект дают. Попробуйте другие, может у них такой проблемы не будет.
...
Рейтинг: 0 / 0
Неправильное прочтение TDateTime из базы
    #39499968
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде в MySQL DATETIME хранится как Integer и в зависимости от версии занимает от 5 до 8 байт.
Попробуйте прочитать его как 5-8 байт и примените алгоритм получения даты согласно битовой маске из этой статьи согласно вашей версии MySQL
https://dev.mysql.com/doc/internals/en/date-and-time-data-type-representation.html
И посмотрите что получится...
...
Рейтинг: 0 / 0
Неправильное прочтение TDateTime из базы
    #39500101
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krapotkin,

Никогда не видел, что бы Now глючил из-за потери точности? ) А я видел. С трудом отбились.
...
Рейтинг: 0 / 0
Неправильное прочтение TDateTime из базы
    #39500166
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Был бы mysql нормальным сервером можно было бы хранимкой на стороне сервера все посчитать чтобы проблем было меньше.
...
Рейтинг: 0 / 0
Неправильное прочтение TDateTime из базы
    #39500535
bk0010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonkrapotkin,
Никогда не видел, что бы Now глючил из-за потери точности? ) А я видел. С трудом отбились.А как? Флаги сопроцессору выставляли?
...
Рейтинг: 0 / 0
Неправильное прочтение TDateTime из базы
    #39500560
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bk0010,

SetPrecisionMode(pmExtended)
...
Рейтинг: 0 / 0
Неправильное прочтение TDateTime из базы
    #39500776
bk0010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо
...
Рейтинг: 0 / 0
Неправильное прочтение TDateTime из базы
    #39500942
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-CiteВроде в MySQL DATETIME хранится как Integer и в зависимости от версии занимает от 5 до 8 байтНа клиент отдается структура datetime
эндиБыл бы mysql нормальным сервером можно было бы хранимкой на стороне сервера все посчитать чтобы проблем было меньше.И что мешает написать хранимку?
...
Рейтинг: 0 / 0
Неправильное прочтение TDateTime из базы
    #39500968
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
когда я последний раз работал с mysql его хранимки были чуть менее чем убоги, не знаю как сейчас там обстановка.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Неправильное прочтение TDateTime из базы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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