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

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

просьба проверить функцию


Страницы:   1 2

Gu ©   (2011-12-10 09:41:00) 

надо получить время между датами, но не в тех форматах, которые dateutils дает (там _всего_ лет..часов, всего минут и тп), а в нормальном - столько то лет..часов,минут и тп).

Сделал так:

Procedure Gu_Dt_TimeBetweenF(const time1,time2:tDateTime;var ve,ye,mo,n,d,c,m,s,ms:Word;checkWeek:Bool=false;checkTh:Bool=false);
var newt:tDateTime;
begin
ve:=0;ye:=0;mo:=0;n:=0;d:=0;c:=0;m:=0;s:=0;ms:=0;
if time2<=time1 then exit;newt:=time2-time1;
if int(newt)>0 then begin DecodeDate(newt, ye,mo,d);ye:=ye-1900;end;
DecodeTime(newt, c,m,s,ms);
if checkTh then if ye>100 then while ye>100 do begin dec(ye,100);inc(ve);end;
if checkWeek then if d>7 then while d>7 do begin dec(d,7);inc(n);end;
end;

use
...
Gu_Dt_TimeBetweenF(strtodatetime('10.12.1992 8:05:01'),strtodatetime('10.11.2112 9:04:03'),ve,ye,mo,n,d,c,m,s,ms,true,true);

ShowMessage('Веков: '+inttostr(ve)+' Лет: '+inttostr(ye)+' Месяцев: '+inttostr(mo)+' Недель: '+inttostr(n)+' Дней: '+
inttostr(d)+' Часов: '+inttostr(c)+' Минут: '+inttostr(m)+' Секунд: '+inttostr(s)+' Мс: '+inttostr(ms));
...

Вопросы:
1. все ли тут верно
2. учитываются ли тут високосные года
3. правильно ли считаются века и недели

Вроде все работает, но терзают смутные сомнения после прочтения всяких "добавьте 1 милисекунду чтобы правильно работало" и вообще опух уже с этими датами разбираться :( Может что то тут не верно?


DVM   (2011-12-11 19:56:00) [1]


> QAZ   (11.12.11 19:43) [30]

Разница между двумя датами оторвана от начала отсчета 30 декабря 1899. Совершенно разные даты могут дать одну и ту же разницу в часах минутах и секундах. DecodeDateTime думает что отсчет ведется от 30 декабря 1899 и даст имеенно результат с учетом этого. Например для разницы неизвестно были ли високосные года между двумя датами.


QAZ   (2011-12-11 19:43:00) [2]


> Anatoly Podgoretsky ©   (10.12.11 21:54) [13]

пачиму нет


Inovet   (2011-12-11 11:13:00) [3]

> [28] SQLEX ©   (11.12.11 11:02)
> и как решать?! :))

0. Робинзон начал строительство в Рождество хххх года.


SQLEX   (2011-12-11 11:02:00) [4]

сейчас решаем с дочерью задачу
1. Робинзон строил забор 10 дней
2. бла-бла на 20 дней дольше чем забор
3. бла-бла1 в два раза дольше чем бла-бла
4. Лодку на 2 месяцадольше чем бла-бла1
Сколько днейстроил лодку?

и как решать?! :)) Повбывав бы...


Anatoly Podgoretsky   (2011-12-11 10:40:00) [5]

> Германн  (11.12.2011 02:17:26)  [26]

И только у программистов не понимание


Германн   (2011-12-11 02:17:00) [6]


> Jeer ©   (11.12.11 02:02) [25]
>
>
> > Германн ©   (11.12.11 01:50) [24]
> >
> > Сутки - двойственное понятие.
>
>
> А время - вообще растяжимое понятие :)
>

"что может быть проще, кроме времени?"
(с)  Клиффорд Симак.


Jeer   (2011-12-11 02:02:00) [7]


> Германн ©   (11.12.11 01:50) [24]
>
> Сутки - двойственное понятие.


А время - вообще растяжимое понятие :)


Германн   (2011-12-11 01:50:00) [8]

Сутки - двойственное понятие. Так что не оставлю.


Inovet   (2011-12-11 01:12:00) [9]

Недели тоже можно оставить.


Inovet   (2011-12-11 01:11:00) [10]

> [19] Германн ©   (11.12.11 00:48)
> P.S. Да и количество суток тоже враньё.

Сутки зря прихватил - оставь.


DVM   (2011-12-11 01:02:00) [11]


> ('Веков: '+inttostr(ve)

С прицелом на далекое будущее проектируется функция. Нетленка можно сказать.


Jeer   (2011-12-11 01:00:00) [12]


> Да и количество суток тоже враньё.


Договорились :)


Германн   (2011-12-11 00:48:00) [13]

Ну и в добавок. Разница в дате/времени между двумя временными отсечками имеет смысл только в сутках, часах, минутах, секундах и т.д. по нисходящей. Всё остальное либо бред, либо враньё.
P.S. Да и количество суток тоже враньё.


Германн   (2011-12-11 00:43:00) [14]


> Inovet ©   (11.12.11 00:32) [16]
>
> > [15] Германн ©   (11.12.11 00:21)
>
> Да вдумались, только что же надо получить в итоге - автор
> сам не знает, похоже.
>

Знает, только сказать не может так, что бы его поняли все.

> ShowMessage('Веков: '+inttostr(ve)+' Лет: '+inttostr(ye)+'
> Месяцев: '+inttostr(mo)+' Недель: '+inttostr(n)+' Дней:
> '+
> inttostr(d)+' Часов: '+inttostr(c)+' Минут: '+inttostr(m)+'
> Секунд: '+inttostr(s)+' Мс: '+inttostr(ms));

Да и собственно автор лишь просил "проверить" его самописную функцию. У меня нет свободного времени её проверять.


DVM   (2011-12-11 00:39:00) [15]


> Gu   (10.12.11 09:41)  


> Сделал так:
>


> 2. учитываются ли тут високосные года

Это тебя надо спрашивать, учитываются или нет. Ты ж сделал.


Inovet   (2011-12-11 00:32:00) [16]

> [15] Германн ©   (11.12.11 00:21)

Да вдумались, только что же надо получить в итоге - автор сам не знает, похоже.


Германн   (2011-12-11 00:21:00) [17]


> Полная шиза..

Не. Полное неумение автора задать вопрос, плюс почти полное нежелание отвечающих вдуматься в вопрос при отвечании. Вот только седобородый АП уловил сей момент и выдал правильную реплику.


Jeer   (2011-12-10 22:48:00) [18]


> надо получить время между датами, но не в тех форматах,
> которые dateutils дает (там _всего_ лет..часов, всего минут
> и тп), а в нормальном - столько то лет..часов,минут и тп).
>  


Полная шиза..


Anatoly Podgoretsky   (2011-12-10 21:54:00) [19]

> QAZ  (10.12.2011 21:36:11)  [11]

Только разница это уже не дата


Inovet   (2011-12-10 21:52:00) [20]

> [11] QAZ   (10.12.11 21:36)

Автор ещё не ответил, что именно его не устраивает в таком преобразовании.


Страницы:   1 2

Наверх

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