![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TDateTime
Лана Розанова © (2002-10-01 11:17:00)Как к переменной TDateTime прибавить 1-у минуту?
СПАСИБО!!!
han_malign (2002-10-01 12:27:00) [1]2User-log
35065 дней от 12/30/1899 минус 1/24/60(одна минута) равно
35064 дня и (24*60-1)/(24*60)(23 часа и 59 минут) от 12/30/1899
как видите число уменьшилось (принцип адитивности имеет обратную силу(65535.99+0.01=65536 - день следующий))
NP-237 (2002-10-01 12:24:00) [2]описка, надо
DateStart := EncodeDate(year,month,day)+TimeStart;
NP-237 (2002-10-01 12:20:00) [3]Работать с датой а не с временем.
DateStart := EncodeDate(year,month,day);
DateEnd := DateStart+EncodeTime(0,1,0,0);
Ну а чистое время можно уже выдернуть.
User-log (2002-10-01 12:12:00) [4]А у меня так не получается:
var
DT,DateStart,TimeStart,DateEnd,TimeEnd:TDateTime;
begin
DT:=now;
DecodeTime(DT,hour,min,sec,msec);
DecodeDate(DT,year,month,day);
DateStart:=EncodeDate(year,month,day);
TimeStart:=EncodeTime(hour,min,sec,msec);
TimeEnd:=TimeStart+EncodeTime(0,1,0,0);
Как, если время стало 00:00:00, прибавить день?
end;
han_malign (2002-10-01 11:50:00) [5]dt:=dt+1.0/(60*24);{1 день/24 часа/60 минут}
поскольку TDateTime это дробное количество дней прошедших с 12/30/1899 (причем и в сторону убывания тоже)- то учтутся все переходы
З.Ы. На самом деле самое сложное это конвертация DateTime в реальное время и обратно, но это уже все сделано.
Из help-а
0 12/30/1899 12:00 am
2.75 1/1/1900 6:00 pm
-1.25 12/29/1899 6:00 am
35065 1/1/1996 12:00 am
NP-237 (2002-10-01 11:44:00) [6]Конечно. Ведь TDateTime - это обычный тип Double.
Я например последний день месяца определяю как
EnCodeDate(2002,6,1)-1
Лана Розанова (2002-10-01 11:38:00) [7]А если min=59 она учтет переход часа, дня, месяца, года?
NP-237 (2002-10-01 11:22:00) [8]+EncodeTime(Hour, Min, Sec, MSec: Word)
+ EncodeTime(0, 0, 1, 0)