![]() |
Помогите
Привет всем!
Помогоите, пожалуйста, разобраться в проблеме. При работе с БД (INFORMIX) в приложении Delphi у меня возникла необходимость сравнивать два значения типа TDateTime? в которых хранится время(до секунд включительно) и дата. Если сравнивать два абсолютно одинаковых значения, то приложение, написанное на Delphi считает, что они разные(значения). Подскажите, как правильно сравнивать значения типа TDateTime с точностью до секунд. Заранее спасибо. |
Привет.
Знаешь у меня была необходимость осуществлять поиск в таблице (DBase) по дате. Так я выкрутился так: я дату перевел в строку и сравнивал. Все работало. Попробуй использовать следующие функции: function DateTimeToStr(DateTime: TDateTime): string; procedure DateTimeToString(var Result: string; const Format: string; DateTime: TDateTime); Если тебе нужна все дата со временем или используй процедуры вытаскивания отдельно даты и времени. Надеюсь, что это тебе поможет, если это не поможет, то прости... |
А как в Delphi правильно сравниваются строки? Я имею ввиду как происходит сравнивание? Посимвольно?
|
Galya
Функция StrComp( S1, S2 : PChar ): Integer; -------------------------------------------------------------------------------- Модуль: SysUtils Описание Функция сравнивает две длинные строки S1 и S2 с учетом регистра. Функция возвращает следующие значения: Условие Возвращаемое значение S1 > S2 > 0 S1 < S2 < 0 S1 = S2 = 0 Пример var S1,S2: PChar; I: Integer; Res: string; begin S1:= 'Company'; S2:= 'COMPANY'; I:= StrComp(S1, S2); ifI>0 then Res:= '>' else if I<0 then Res:= '<' else Res:= '='; MessageDlg(S1+ Res+ S2, mtInformation, [mbOk], 0); end; Если строки содержат национальные символы, то для их сравнения используй функцию AnsiStrComp. |
Galya
Есть ф-ия CompareDateTime(const A, B: TDateTime): TValueRelationship Сравнивает A и B... В uses пишешь DateUtils... Возвращаемые значения: -1 (A<B), 0 (A=B), +1 (A>B) Также есть ф-ии CompareDate(const A, B: TDateTime): TValueRelationship и CompareTime(const A, B: TDateTime): TValueRelationship, которые сравнивают только дату и только время... и не нужны никакие строки :) |
А если хочешь сравнивать по-символьно, то если var S: String; i: Integer, то S[i] - это i-ый символ в строке, как понимаешь можно использовать в цикле.
|
Спасибо всем! Я попробую и если интересно, то сообщу о результатах. :-)
|
а я всегда округляю до суток (часов / минут - по необходимости) когда надо сравнивать даты
а то на милисекундах "не равно" срабатывает |
Вот! Это то, что нужно, а как округлить до секунд????
|
Эх, ребят, мне бы так разбираться в Delphi, чтобы с вами вместе обсуждать всякие проблемы. Завидую я вам по белому. Удачи!
|
1 min=60 sek
1 chas=3600 sec poschitai vse v secundi i slozhi. Eto moi lubimi sposob sravneniya:) Tolko v delphyah ne pomnu kak vse po odinochki vitaskivat(t.k. delphi ne moi konek) Azerilight Eshe ne pozdno:):yees: |
Вытащить из текущего времени часы и секунды например можно вот так:
Текущее время - Time; S - строка. Тогда: S:=FormatDateTime('hh:mm', Time); другими словами - короткий формат времени :) hh - часы, mm - минуты, ss- секунды, : - разделитель таким образом можно форматить как хочешь. Также форматится дата, текущяя дата - Date; dd/mm/yyyy - полный формат даты из чиселок. Добавлено через 1 минуту: кстати, там в формате времени есть еще am/pm , в общем смотри help по Date-Time Format Strings |
Как взять секунды:
procedure DecodeDateTime(const AValue: TDateTime; out AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word); function YearOf(const AValue: TDateTime): Word; //возвращает год function MonthOf(const AValue: TDateTime): Word; //возвращает месяц function WeekOf(const AValue: TDateTime): Word; //возвращает неделю function DayOf(const AValue: TDateTime): Word; //возвращает день function HourOf(const AValue: TDateTime): Word; //возвращает час function MinuteOf(const AValue: TDateTime): Word; //возвращает минуту function SecondOf(const AValue: TDateTime): Word; //возвращает секунду function MilliSecondOf(const AValue: TDateTime): Word; //возвращает милисекунду все эти ф-ии из DateUtils... |
Хе-хе-хе
А в Delphi5 нету модуля DateUtils!!!!! |
Зато есть SysUtils !!
|
Galya
если надо, могу прислать |
К вопросу о датах, мне тут понадобилось в прогу ежедневник встроить, и соответственно кнопками вперед/назад листать календарь. Что-то я в ступор совсем вошел и никак не пойму как следующую и предыдущую дату относительно сегодняшней получить...
|
/7y3uK какой язык пользуешь ? функции в каждом есть, но во всех - разные
|
Вложений: 1
/7y3uK
Ф-ия: function IncDay(const AValue: TDateTime; const ANumberOfDays: Integer): TDateTime; begin Result := AValue + ANumberOfDays; end; Увеличивает Дату AValue на ANumberOfDays дней... Соответственно: AValue - ANumberOfDays - уменьшает... В прицепе - DateUtils.pas |
2 f00rd
Ну спасибо!! :)) Маленький - да удаленький. Кстати, есть еще набор компонентов от ESB но он дюже неподъемный ... там помимо похожих функций и процедурок еще около 100 разных эдиторных VCL с кучей настроек. |
| Часовой пояс GMT +4, время: 13:29. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.