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

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

Как определить промежуток между двумя переменными TDateTime? [D6, Win2k]


Mishenka ©   (2005-01-28 14:18:00) 

Как определить промежуток времени между двумя переменными TDateTime?


Anatoly Podgoretsky   (2005-01-28 19:54:00) [1]

pavel_guzhanov   (28.01.05 16:28) [5]
После вычитания никаких дат не получается, а только промежуток времени между двумя переменными TDateTime


Vasya.ru   (2005-01-28 16:52:00) [2]

begin...end ©   (28.01.05 14:32) [4]
Например, вот столько дней осталось до моего Дня Рождения:
'7.09.2005 17:00'

а мне казалось, ты старше


pavel_guzhanov   (2005-01-28 16:28:00) [3]

Когда то на этом форуме я прочитал вот это:

"Структура и смысл значений типа tDateTime

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

Целая часть числа преставляет дату - это число суток, прошедших с 30 декабря 1899 года. Т.е. значение 0 представляет 0ч. 0мин. 30-12-1899, значение 1 - 0ч. 0мин. 31-12-1899, 10 - 0ч. 0мин. 9-01-1900, -2 - 0ч. 0мин. 28-12-1899 и т.д.

Чтобы увеличить/уменьшить дату на n дней, нужно прибавить/отнять n от значения даты. Чтобы увеличить/уменьшить дату на n месяцев, нужно воспользоваться функцией IncMonth. Чтобы увеличить/уменьшить дату на n лет нужно воспользоваться той же функцией, передав ей в качестве количества месяцев n*12.

Дробная часть числа представляет время.
Целое значение соответствует 0ч. 0мин. представленной этим значением даты. Чтобы увеличить/уменьшить время на 1 час, нужно прибавить/отнять от значения 1/24. 1 минута соответствует 1/1440. 1 секунда - 1/86400.

2.25, таким образом, соответствует 6ч. 0мин. 1-01-1900."

К сожалению, не помню автора, но на авторство сам не претендую. При работе с TDateTime всегда руководствуюсь этим описанием...


begin...end   (2005-01-28 14:32:00) [4]

> [3] Mishenka   (28.01.05 14:24)

После вычитания получается количество дней.
Например, вот столько дней осталось до моего Дня Рождения:

procedure TForm1.Button1Click(Sender: TObject);
var
 D1, D2: TDateTime;
begin
 D1 := Now;
 D2 := StrToDateTime('7.09.2005 17:00');
 Caption := FloatToStr(D2 - D1)
end.


А если вспомнить, что в сутках 24 часа, или 24 * 60 = 1440 минут, - так совсем всё понятно становится.


Mishenka   (2005-01-28 14:24:00) [5]

Так после вычитания получается 1899 год и т.п., а мне надо чтобы было 1 день .. часов .. минут и т.д.


Александр Иванов   (2005-01-28 14:21:00) [6]

Промежуток в чем: дни, недели, месяцы, года и т.д.?
DaysBetween
WeeksBetween
MonthBetween
YearsBetween
и т.д.


begin...end   (2005-01-28 14:20:00) [7]

> Mishenka   (28.01.05 14:18)

Вычитанием.


Наверх

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