время между



Автор Ђаня Пластун задал вопрос в разделе Другие языки и технологии

Нужно рассчитать время между двумя датами в паскале.. Вроде начало получаться, но в итоге запуталась с месяцами. . и получил лучший ответ

Ответ от Евгений Фирсов[гуру]
program Date2;
uses crt;
type
TDate = record
day: 1..31;
month: 1..12;
year: word;
end;
var
srcDate, curDate: TDate;
function VisokosnyGod(n:integer):boolean;
begin
if (((n mod 400)=0) or (((n mod 3)=0) and ((n mod 100)<>0)) then
VisokosnyGod:=TRUE
else
VisokosnyGod:=FALSE;
end;
function CheckDayOfMonth(day, month, year: integer): boolean;
begin
if ((day>30) and (month in [2,4,6,9,11])) or
((day>29) and (month=2)) or
((day>28) and (month=2) and (not VisokosnyGod(year)) then
CheckDayOfMonth:=false
else
CheckDayOfMonth:=true;
end;
procedure EnterDate(var d: TDate);
var
n: integer;
dayOk: boolean;
begin
write('Год: ');
readln(d.year);
repeat
write('Месяц (1..12): ');
readln(n);
if (n<1) or (n>12) then
writeln('Ошибка! Номер месяца должен находиться в диапазоне 1..12');
until (n>0) and (n<13);
d.month:=n;
repeat
dayOk:=true;
write('День (1..31):');
readln(n);
if (n<1) or (n>31) or (not CheckDayOfMonth(n,d.month, d.year)) then begin
writeln('Ошибка! День не может иметь такое значение для выбранных '+ ' года и месяца. Выберите другой день');
dayOk:=false;
end;
until dayOk;
d.day:=n;
end;
function DaysFromZero(d,m,y:integer):longint;
begin
if m>2 then
m:=m+1
else begin
m:=m+13;
y:=y-1;
end;
DaysFromZero:=trunc(36525*y/100+306*m/10+d);
end;
begin
clrscr;
writeln('Программа возвращает количество дней между заданной'+'датой и текущей');
writeln;
write ('Введите сегодняшнее число: ');
EnterDate(curDate);
write ('Введите интересующую Вас дату: ');
EnterDate(srcDate);
writeln('Заданная дата: ',srcDate.day,'.',srcDate.month,'.',srcDate.year);
writeln('Сегодняшняя дата: ',curDate.day,'.',curDate.month,'.',curDate.year);
writeln('Количество дней между этими датами = ',
abs(DaysFromZero(curDate.day,curDate.month,curDate.year)-
DaysFromZero(srcDate.day,srcDate.month,srcDate.year));
writeln('Нажмите [Enter] для завершения программы');
readln;
end.
Источник:

Ответ от IT-специалист[гуру]
Используй модуль DateUtils

Ответ от Профессор[гуру]
function GetHour(d1,m1,y1,d2,m2,y2:integer):integer;
var n1,n2:TDateTime;
begin
n1:=EncodeDate(y1,m1,d1);
n2:=EncodeDate(y2,m2,d2);
GetHour:=round((n2-n1)*24);
end;

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: Нужно рассчитать время между двумя датами в паскале.. Вроде начало получаться, но в итоге запуталась с месяцами. .
Часовой пояс на Википедии
Посмотрите статью на википедии про Часовой пояс
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*