![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вычитение даты-времени [D2005]
oleg1963lora © (2010-04-05 09:44:00)Здравствуйте Мастера! Есть такой код:
var MyMinDateTim, MyMaxDateTime : TDateTime;
year,month,day,hour,min,sec,msec : word;
vremya, vremya2 : string;
begin
vremya:='01.03.2010 09:18';
vremya2:='01.03.2010 09:19';
MyMinDateTime:=StrToDateTime(vremya);
MyMaxDateTime:=StrToDateTime(vremya2);
MyMaxDateTime:=MyMaxDateTime-MyMinDateTime;
DecodeDateTime(MyMaxDateTime,year,month,day,hour,min,sec,msec);
При вычитании получаю:
year=1899
month=12
Day=30
Hour=0
Min=1
sec=0
msec=0.
Подскажите пожалуйста где я ошибаюсь?
И. Павел (2010-04-05 10:28:00) [41]> Year*Month*Day*Hour*Min
???
Зачем их перемножать? Я не понял алгоритм...
Строки, не кратные 12, это:
1.2.2009 1:12
1.2.2009 1:24
1.2.2009 1:36
Или же нужно считать число минут с нулевого года, и проверять на кратность это число?
Anatoly Podgoretsky (2010-04-05 10:28:00) [42]> oleg1963lora (05.04.2010 10:20:11) [11]
Объясни суть данно манипуляции?
Year:=Year*Month*Day*Hour*Min;
oleg1963lora (2010-04-05 10:20:00) [43]Так ?
MyMaxDateTime:=MyMaxDateTime-MyMinDateTime;
DecodeDateTime(MyMaxDateTime,year,month,day,hour,min,sec,msec);
year:=year-1899;
month:=month-12;
day:=day-30;
Year:=Year*Month*Day*Hour*Min;
Month:=Month*Day*Hour*Min;
Day:=Day*Hour*Min;
hour:=Hour*Min;
T:=Year+Month+Day+Hour+Min;
if not (T in [11..13]) then
SummList.Delete(i+1);
И. Павел (2010-04-05 10:16:00) [44]
[8] oleg1963lora (05.04.10 10:07)
Используйте:
DecodeTime(Time, Hout, Min, Sec, MSec)
Sha (2010-04-05 10:07:00) [45]> oleg1963lora (05.04.10 09:50) [4]
> А как тогда получить year=0
> Anatoly Podgoretsky © (05.04.10 09:51) [5]
> Просто от результата отнять 1899,12,30
Ща запутаю :)
Потом попытайся длину интервала выразить в часах.
oleg1963lora (2010-04-05 10:07:00) [46]
> что ты не путаешь дату с интервалом
Не понял вопроса. Нужно из TStringList удалить строки с минутами не кратными 12
Anatoly Podgoretsky (2010-04-05 09:54:00) [47]> oleg1963lora (05.04.2010 09:52:06) [6]
Тогда проверочное задание, приведи функцию преобразования, а то есть сомнение что ты опять понял, что ты не путаешь дату с интервалом
oleg1963lora (2010-04-05 09:52:00) [48]
> Anatoly Podgoretsky
Спасибо, понял.
Anatoly Podgoretsky (2010-04-05 09:51:00) [49]> oleg1963lora (05.04.2010 09:50:04) [4]
Просто от результата отнять 1899,12,30
oleg1963lora (2010-04-05 09:50:00) [50]А как тогда получить
year=0
month=0
Day=0
Hour=0
Min=1
sec=0
msec=0 ?
Anatoly Podgoretsky (2010-04-05 09:49:00) [51]> oleg1963lora (05.04.2010 09:44:00) [0]
Ошибок нет, результат правильный, только почему ты считаешь что в результате вычитания у тебя будет датавремя?
Это раз, а два - а как ты хочешь, это совсем не понятно.
И. Павел (2010-04-05 09:48:00) [52]Тоесть, например:
procedure TForm2.Button1Click(Sender: TObject);
var D:TDateTime;
begin
D:=0;
Caption:=DateTimeToStr(D);
end;
Показывает: 30/12/1899
И. Павел (2010-04-05 09:47:00) [53]Все нормально. Время высчитывается от 1899 года. Тоесть MyMaxDateTime содержит 0.0***1, но это воспринимается как 1899 год.