Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 12:11 28.06.24 
Клубове/ Компютри и Интернет / Delphi Пълен преглед*
Информация за клуба
Тема Re: hoursBetween : BUG ? [re: NDeu]
Автор andrew_nikoloff (минаващ)
Публикувано29.12.03 11:26  



Добреее.... Да видим сега как стоят нещата...
Значи по въпросчетата - нямах точно това предвид. Идеята ми беше, че когато имаме разлика от време нямаме ясно дефинирани месеци и години. Веднага давам пример - имаме разлика от 365 дни. Прилича разликата да е 1 година, нали ? Да, ,при условие, че датите ни са 1.1.2002 и 1.1.2003 например. Ама ако първата дата е 1.1.2000, то втората дата обаче ще дойде 31.12.2000... По същия начин стоят нещата и с месеците - разлика от 30 дни може да е 1 месец, или 1 месец и 1 или 2 дена, или просто 30 дни

Мдаааа. А сега едно възможно решение:
(само да кажа, че при минус не знам си колко градуса навън и едноседмична почивка за климатика умирам от студ и не мога много-много да мисля, така че може и да съм объркал нещо )

Дефинираме си типче, за да си улесним живота.

type TDateArray = Array[0..6] of Word;
const bases: TDateArray = (65535, 12, 30, 24, 60, 60, 1000);

И няколко помощни функцийки:


function GetBase(da: TDateArray; idx: Integer): Word;
var y, m, d: Word;
begin
if idx = 2 then
begin
if da[1] = 12 then
begin
m := 1;
y := da[0] + 1;
end
else
begin
m := da[1];
y := da[0];
end;
DecodeDate(EncodeDate(y, m, 1) - 1, y, m, d);
Result := d;
end
else
Result := bases[idx];
end;

procedure DateDec(var da: TDateArray; idx: Integer; val: Word);
begin
if da[idx] < val then
begin
da[idx] := da[idx] + GetBase(da, idx) - val;
DateDec(da, idx - 1, 1);
end
else
Dec(da[idx], val);
end;


А самият код е следния:


var
a1, a2: TDateArray;
dt1, dt2: TDateTime;

//dt2 > dt1
DecodeDate(dt1, a1[0], a1[1], a1[2]);
DecodeTime(dt1, a1[3], a1[4], a1[5], a1[6]);

DecodeDate(dt2, a2[0], a2[1], a2[2]);
DecodeTime(dt2, a2[3], a2[4], a2[5], a2[6]);

for i := 6 downto 0 do
DateDec(a2, i, a1);

ShowMessage(Format('%4.4d.%2.2d.%2.2d %2.2d:%2.2d:%2.2d:%3.3d', [a2[0], a2[1], a2[2], a2[3], a2[4], a2[5], a2[6]]));


Не е най-обстойно тестваното от мен нещо, но тъй като просто умирам от студ, а то има вид да работи горе-долу - поствам си го и оставям на народа да си каже мнението, пък аз довечера като се прибера на топло и полежа малко върху печката, че да ми се размрази оная работа (акъла имам предвид ) ще му хвърля още едно оченце

Човешкият ум е ограничен. Глупостта не е.

Цялата тема
ТемаАвторПубликувано
* hoursBetween : BUG ? jiv   28.10.03 14:58
. * Re: hoursBetween : BUG ? NDeu   28.10.03 18:19
. * Re: hoursBetween : BUG ? jiv   30.10.03 10:18
. * Re: hoursBetween : BUG ? NDeu   30.10.03 18:34
. * Re: hoursBetween : BUG ? andrew_nikoloff   31.10.03 08:19
. * Re: hoursBetween : BUG ? NDeu   27.12.03 14:14
. * Re: hoursBetween : BUG ? andrew_nikoloff   27.12.03 16:14
. * Re: hoursBetween : BUG ? NDeu   27.12.03 23:41
. * Re: hoursBetween : BUG ? andrew_nikoloff   28.12.03 10:19
. * Re: hoursBetween : BUG ? NDeu   29.12.03 09:00
. * Re: hoursBetween : BUG ? andrew_nikoloff   29.12.03 11:26
. * Бутилка червено вино.... NDeu   29.12.03 12:52
. * Re: Бутилка червено вино.... andrew_nikoloff   29.12.03 13:55
. * Re: hoursBetween : BUG ? PhantomAS   30.10.03 21:32
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.