![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
просьба проверить функцию
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)
Автор ещё не ответил, что именно его не устраивает в таком преобразовании.