Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вычитение даты-времени [D2005]


Страницы:   1 2 3

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 год.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо