imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 10.04.2004, 00:59     # 1
Galya
Guest
 
Сообщения: n/a

Exclamation Помогите

Привет всем!
Помогоите, пожалуйста, разобраться в проблеме. При работе с БД (INFORMIX) в приложении Delphi у меня возникла необходимость сравнивать два значения типа TDateTime? в которых хранится время(до секунд включительно) и дата. Если сравнивать два абсолютно одинаковых значения, то приложение, написанное на Delphi считает, что они разные(значения). Подскажите, как правильно сравнивать значения типа TDateTime с точностью до секунд. Заранее спасибо.
 
Старый 10.04.2004, 10:00     # 2
modest
Junior Member
 
Аватар для modest
 
Регистрация: 10.05.2003
Адрес: S-Petersburg Russia
Пол: Male
Сообщения: 92

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

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

Если тебе нужна все дата со временем или используй процедуры вытаскивания отдельно даты и времени.
Надеюсь, что это тебе поможет, если это не поможет, то прости...
modest вне форума  
Старый 10.04.2004, 11:47     # 3
Galya
Guest
 
Сообщения: n/a

А как в Delphi правильно сравниваются строки? Я имею ввиду как происходит сравнивание? Посимвольно?
 
Старый 10.04.2004, 14:59     # 4
woo
Flasher
 
Регистрация: 04.11.2003
Адрес: Питер
Сообщения: 76

woo Известность не заставит себя ждать
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.
woo вне форума  
Старый 10.04.2004, 15:02     # 5
f00rd
::VIP::
 
Аватар для f00rd
 
Регистрация: 11.06.2003
Адрес: Там...
Сообщения: 236

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


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

Последний раз редактировалось f00rd; 10.04.2004 в 15:13.
f00rd вне форума  
Старый 10.04.2004, 15:07     # 6
/7y3uK
Advanced Member
 
Аватар для /7y3uK
 
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498

/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)
А если хочешь сравнивать по-символьно, то если var S: String; i: Integer, то S[i] - это i-ый символ в строке, как понимаешь можно использовать в цикле.
__________________
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
/7y3uK вне форума  
Старый 10.04.2004, 17:20     # 7
Galya
Guest
 
Сообщения: n/a

Спасибо всем! Я попробую и если интересно, то сообщу о результатах. :-)
 
Старый 10.04.2004, 19:53     # 8
SapeR
::VIP::
 
Регистрация: 17.12.2002
Адрес: Q-ata, Israel
Сообщения: 310

SapeR Луч света в тёмном царствеSapeR Луч света в тёмном царствеSapeR Луч света в тёмном царствеSapeR Луч света в тёмном царствеSapeR Луч света в тёмном царстве
а я всегда округляю до суток (часов / минут - по необходимости) когда надо сравнивать даты
а то на милисекундах "не равно" срабатывает
SapeR вне форума  
Старый 11.04.2004, 00:04     # 9
Galya
Guest
 
Сообщения: n/a

Вот! Это то, что нужно, а как округлить до секунд????
 
Старый 11.04.2004, 22:36     # 10
Azerilight
Junior Member
 
Аватар для Azerilight
 
Регистрация: 04.04.2004
Адрес: Платформа "Чираг-1"
Сообщения: 154

Azerilight Луч света в тёмном царствеAzerilight Луч света в тёмном царствеAzerilight Луч света в тёмном царствеAzerilight Луч света в тёмном царствеAzerilight Луч света в тёмном царствеAzerilight Луч света в тёмном царстве
Эх, ребят, мне бы так разбираться в Delphi, чтобы с вами вместе обсуждать всякие проблемы. Завидую я вам по белому. Удачи!
Azerilight вне форума  
Старый 12.04.2004, 22:31     # 11
Mind
Junior Member
 
Аватар для Mind
 
Регистрация: 05.02.2004
Адрес: Indianapolis
Сообщения: 64

Mind Путь к славе только начался
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
Mind вне форума  
Старый 14.04.2004, 13:54     # 12
/7y3uK
Advanced Member
 
Аватар для /7y3uK
 
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498

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

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

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

Добавлено через 1 минуту:
кстати, там в формате времени есть еще am/pm , в общем смотри help по Date-Time Format Strings
__________________
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
/7y3uK вне форума  
Старый 14.04.2004, 16:27     # 13
f00rd
::VIP::
 
Аватар для f00rd
 
Регистрация: 11.06.2003
Адрес: Там...
Сообщения: 236

f00rd Популярный человек на этом форумеf00rd Популярный человек на этом форумеf00rd Популярный человек на этом форумеf00rd Популярный человек на этом форумеf00rd Популярный человек на этом форумеf00rd Популярный человек на этом форумеf00rd Популярный человек на этом форумеf00rd Популярный человек на этом форуме
Как взять секунды:

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...
f00rd вне форума  
Старый 15.04.2004, 09:10     # 14
Galya
Guest
 
Сообщения: n/a

Хе-хе-хе
А в Delphi5 нету модуля DateUtils!!!!!
 
Старый 15.04.2004, 13:34     # 15
/7y3uK
Advanced Member
 
Аватар для /7y3uK
 
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498

/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)
Зато есть SysUtils !!
__________________
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
/7y3uK вне форума  
Старый 15.04.2004, 18:59     # 16
f00rd
::VIP::
 
Аватар для f00rd
 
Регистрация: 11.06.2003
Адрес: Там...
Сообщения: 236

f00rd Популярный человек на этом форумеf00rd Популярный человек на этом форумеf00rd Популярный человек на этом форумеf00rd Популярный человек на этом форумеf00rd Популярный человек на этом форумеf00rd Популярный человек на этом форумеf00rd Популярный человек на этом форумеf00rd Популярный человек на этом форуме
Galya
если надо, могу прислать
f00rd вне форума  
Старый 23.04.2004, 14:36     # 17
/7y3uK
Advanced Member
 
Аватар для /7y3uK
 
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498

/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)
К вопросу о датах, мне тут понадобилось в прогу ежедневник встроить, и соответственно кнопками вперед/назад листать календарь. Что-то я в ступор совсем вошел и никак не пойму как следующую и предыдущую дату относительно сегодняшней получить...
/7y3uK вне форума  
Старый 23.04.2004, 21:28     # 18
SapeR
::VIP::
 
Регистрация: 17.12.2002
Адрес: Q-ata, Israel
Сообщения: 310

SapeR Луч света в тёмном царствеSapeR Луч света в тёмном царствеSapeR Луч света в тёмном царствеSapeR Луч света в тёмном царствеSapeR Луч света в тёмном царстве
/7y3uK какой язык пользуешь ? функции в каждом есть, но во всех - разные
SapeR вне форума  
Старый 24.04.2004, 13:44     # 19
f00rd
::VIP::
 
Аватар для f00rd
 
Регистрация: 11.06.2003
Адрес: Там...
Сообщения: 236

f00rd Популярный человек на этом форумеf00rd Популярный человек на этом форумеf00rd Популярный человек на этом форумеf00rd Популярный человек на этом форумеf00rd Популярный человек на этом форумеf00rd Популярный человек на этом форумеf00rd Популярный человек на этом форумеf00rd Популярный человек на этом форуме
/7y3uK

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

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

В прицепе - DateUtils.pas
Вложения
Тип файла: zip DateUtils.zip (11.9 Кбайт, 3 просмотров - Кто скачивал? )

Последний раз редактировалось f00rd; 24.04.2004 в 13:48.
f00rd вне форума  
Старый 26.04.2004, 20:06     # 20
/7y3uK
Advanced Member
 
Аватар для /7y3uK
 
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498

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

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


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




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