![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не правильно работает MonthsBetween [D7, WinXP]
kyn66 © (2009-02-06 11:42:00)Добрый день. Использую RX компонент function MonthsBetween(Date1, Date2: TDateTime): Double;
Впервые пришлось его применить . Однако после применения обнаружил неверно выдаваемые результаты. Вот оригинальная функция:
function MonthsBetween(Date1, Date2: TDateTime): Double;
var
D, M, Y: Word;
begin
DateDiff(Date1, Date2, D, M, Y);
Result := 12 * Y + M;
if (D > 1) and (D < 7) then Result := Result + 0.25
else if (D >= 7) and (D < 15) then Result := Result + 0.5
else if (D >= 15) and (D < 21) then Result := Result + 0.75
else if (D >= 21) then Result := Result + 1;
end;
У меня разница в датах 22 дня. Т.е. по идее функция перемещается на строку else if (D >= 21) then Result := Result + 1; и получается на выходе 1. Т.е. разница в датах = 1 мес. Это в корне неверно. 22 дня и 2 мес. Почему так? В чем дело? Как лечить?
Anatoly Podgoretsky (2009-02-06 19:33:00) [1]> Ega23 (06.02.2009 18:48:02) [62]
Я в курсе, что в Дельфи функция неполная, да и Папа против.
Jeer (2009-02-06 18:58:00) [2]
> Year mod 400
Ну вот, все таки добрался до модуля :)
> В смысле, что ничего кроме велосипеда?
> Дык, неудобно как-то, потертости будут.
Ну, кто видел велотрусы, тот поймет :)
Сестрам видеть это было невмоготу, а мы побоялись за..
В общем, около 10 км я и не оглядывался, потом резко в Жиздру охладиться.
Ega23 (2009-02-06 18:48:00) [3]
> Вероятность 1/10, поскольку еще есть и 4000, каждый 4000
> год невисокосный.
function IsLeapYear(Year: Word): Boolean;
begin
Result := (Year mod 4 = 0) and ((Year mod 100 <> 0) or (Year mod 400 = 0));
end;
Anatoly Podgoretsky (2009-02-06 18:43:00) [4]> Leonid Troyanovsky (06.02.2009 18:07:56) [56]
Каждая, и левая и правая.
Anatoly Podgoretsky (2009-02-06 18:42:00) [5]
> Ну, все - забодали пацана.
Его не забодаешь, а вот он может, он же железобетонный!
Anatoly Podgoretsky (2009-02-06 18:41:00) [6]> Leonid Troyanovsky (06.02.2009 17:33:51) [51]
Вероятность 1/10, поскольку еще есть и 4000, каждый 4000 год невисокосный.
Leonid Troyanovsky (2009-02-06 18:30:00) [7]
> Jeer © (06.02.09 18:24) [57]
> велосипедно неглиже
В смысле, что ничего кроме велосипеда?
Дык, неудобно как-то, потертости будут.
> Вместо стандартных 21-22 км/час втопил аж 25 в среднем на
> 100 км.
Неужель 100 км преследовали?
--
Regards, LVT.
Jeer (2009-02-06 18:24:00) [8]
> по-братски
Интересно, а как по сестрински ?
Летом заехали в велосипедно неглиже в Шамординский монастырь - ох, вот я и узнал, как сестры горячи.
Вместо стандартных 21-22 км/час втопил аж 25 в среднем на 100 км.
Leonid Troyanovsky (2009-02-06 18:07:00) [9]
> Anatoly Podgoretsky © (06.02.09 16:06) [44]
> А у нас перекуры по 31 минуты. Это ровно половина часа.
А первая или вторая?
А делите как: по-братски или по-справедливому?
--
Regards, LVT.
Ega23 (2009-02-06 18:00:00) [10]
> Огласите, пжлст, окончательную вероятность.
Да ну её в это... В общем, кому надо - тот посчитает... :)
Leonid Troyanovsky (2009-02-06 17:53:00) [11]
> Плохиш © (06.02.09 17:44) [52]
> Хорошо вам, у вас уже рабочий день закончился...
А я успел еще и шираза южно-африканского 2004 года пригубить.
Весьма недурственно.
--
Regards, LVT.
Jeer (2009-02-06 17:48:00) [12]
> Плохиш © (06.02.09 17:44) [52]
>
> Хорошо вам, у вас уже рабочий день закончился...
Более того - тяпница и у нассокращенный на час.
Чего сижу ?
Антонова слушаю - дома не дадут спиногрызы
Плохиш (2009-02-06 17:44:00) [13]Хорошо вам, у вас уже рабочий день закончился...
Leonid Troyanovsky (2009-02-06 17:33:00) [14]
> Ega23 © (06.02.09 16:41) [49]
> Смысл такой, что каждый кратный ста год не является високосным,
> но кратный 400 - является. Вроде так.
Огласите, пжлст, окончательную вероятность.
--
Regards, LVT.
Jeer (2009-02-06 17:14:00) [15]Ну, все - забодали пацана.
Он уже и не надеется прожить хотя бы неделю после выволочки в этой ветке, а вы ему тут про 400 лет по модулю :)
Ega23 (2009-02-06 16:41:00) [16]
> "Там" ещё что-то и с 100 лет связано, что видно из 1900.
> Т.к. 1900 с 400 не связано :)))
> Но "там" связь с 400 всё-таки есть....
>
Смысл такой, что каждый кратный ста год не является високосным, но кратный 400 - является. Вроде так.
Johnmen (2009-02-06 16:37:00) [17]
> Там ещё как-то с периодичностью в 400 лет связано. Типа,
> 1900 год - не високосный.
"Там" ещё что-то и с 100 лет связано, что видно из 1900. Т.к. 1900 с 400 не связано :)))
Но "там" связь с 400 всё-таки есть....
Ega23 (2009-02-06 16:21:00) [18]
> И в феврале тоже как повезет, вероятность 0,75
Меньше. Там ещё как-то с периодичностью в 400 лет связано. Типа, 1900 год - не високосный.
Ща проверю.
Ну да, так и есть
select cast(58 as datetime)
union all
select cast(59 as datetime)
------------------------------------------------------
1900-02-28 00:00:00.000
1900-03-01 00:00:00.000
(2 row(s) affected)
Ega23 (2009-02-06 16:16:00) [19]
> А почему не 8, не 9, не 10???
Потому что в неделе - ровно 7 дней. Не бывает високосных недель.
Sergey13 (2009-02-06 16:14:00) [20]> [44] Anatoly Podgoretsky © (06.02.09 16:06)
31 минута?!! Гаванские сигары с коньяком что ли? 8-)