IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   Помогите (http://www.imho.ws/showthread.php?t=56119)

Galya 10.04.2004 00:59

Помогите
 
Привет всем!
Помогоите, пожалуйста, разобраться в проблеме. При работе с БД (INFORMIX) в приложении Delphi у меня возникла необходимость сравнивать два значения типа TDateTime? в которых хранится время(до секунд включительно) и дата. Если сравнивать два абсолютно одинаковых значения, то приложение, написанное на Delphi считает, что они разные(значения). Подскажите, как правильно сравнивать значения типа TDateTime с точностью до секунд. Заранее спасибо.

modest 10.04.2004 10:00

Привет.
Знаешь у меня была необходимость осуществлять поиск в таблице (DBase) по дате. Так я выкрутился так: я дату перевел в строку и сравнивал. Все работало. Попробуй использовать следующие функции:

function DateTimeToStr(DateTime: TDateTime): string;
procedure DateTimeToString(var Result: string; const Format: string; DateTime: TDateTime);

Если тебе нужна все дата со временем или используй процедуры вытаскивания отдельно даты и времени.
Надеюсь, что это тебе поможет, если это не поможет, то прости...

Galya 10.04.2004 11:47

А как в Delphi правильно сравниваются строки? Я имею ввиду как происходит сравнивание? Посимвольно?

woo 10.04.2004 14:59

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.

f00rd 10.04.2004 15:02

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, которые сравнивают только дату и только время...


и не нужны никакие строки :)

/7y3uK 10.04.2004 15:07

А если хочешь сравнивать по-символьно, то если var S: String; i: Integer, то S[i] - это i-ый символ в строке, как понимаешь можно использовать в цикле.

Galya 10.04.2004 17:20

Спасибо всем! Я попробую и если интересно, то сообщу о результатах. :-)

SapeR 10.04.2004 19:53

а я всегда округляю до суток (часов / минут - по необходимости) когда надо сравнивать даты
а то на милисекундах "не равно" срабатывает

Galya 11.04.2004 00:04

Вот! Это то, что нужно, а как округлить до секунд????

Azerilight 11.04.2004 22:36

Эх, ребят, мне бы так разбираться в Delphi, чтобы с вами вместе обсуждать всякие проблемы. Завидую я вам по белому. Удачи!

Mind 12.04.2004 22:31

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:

/7y3uK 14.04.2004 13:54

Вытащить из текущего времени часы и секунды например можно вот так:
Текущее время - Time; S - строка.
Тогда:

S:=FormatDateTime('hh:mm', Time);

другими словами - короткий формат времени :)
hh - часы, mm - минуты, ss- секунды, : - разделитель
таким образом можно форматить как хочешь. Также форматится дата, текущяя дата - Date;
dd/mm/yyyy - полный формат даты из чиселок.

Добавлено через 1 минуту:
кстати, там в формате времени есть еще am/pm , в общем смотри help по Date-Time Format Strings

f00rd 14.04.2004 16:27

Как взять секунды:

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...

Galya 15.04.2004 09:10

Хе-хе-хе
А в Delphi5 нету модуля DateUtils!!!!!

/7y3uK 15.04.2004 13:34

Зато есть SysUtils !!

f00rd 15.04.2004 18:59

Galya
если надо, могу прислать

/7y3uK 23.04.2004 14:36

К вопросу о датах, мне тут понадобилось в прогу ежедневник встроить, и соответственно кнопками вперед/назад листать календарь. Что-то я в ступор совсем вошел и никак не пойму как следующую и предыдущую дату относительно сегодняшней получить...

SapeR 23.04.2004 21:28

/7y3uK какой язык пользуешь ? функции в каждом есть, но во всех - разные

f00rd 24.04.2004 13:44

Вложений: 1
/7y3uK

Ф-ия:
function IncDay(const AValue: TDateTime;
const ANumberOfDays: Integer): TDateTime;
begin
Result := AValue + ANumberOfDays;
end;

Увеличивает Дату AValue на ANumberOfDays дней...
Соответственно: AValue - ANumberOfDays - уменьшает...

В прицепе - DateUtils.pas

/7y3uK 26.04.2004 20:06

2 f00rd
Ну спасибо!! :)) Маленький - да удаленький.
Кстати, есть еще набор компонентов от ESB но он дюже неподъемный ... там помимо похожих функций и процедурок еще около 100 разных эдиторных VCL с кучей настроек.


Часовой пояс GMT +4, время: 13:29.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.