pascal - дата и время
Как правильно посчитать разницу дат?
Код для PascalABC.Net:
program Now; uses System; begin writeln(DateTime.Now,' ; часов ',DateTime.Now.Hour,' ; минут ',DateTime.Now.Minute); end.
program time_format; begin WriteLnFormat('{0:HH:mm}', System.DateTime.Now); WriteLnFormat('{0:HH:mm:ss}', System.DateTime.Now); end.
program time_format2; uses System; begin writeln(String.Format('{0:d/M/yyyy HH:mm:ss}', DateTime.Now)); end.
program times; uses System; begin var d: DateTime := DateTime.Now; writeln(d.Day,'.',d.Month,'.',d.Year); writeln(d.Hour,':',d.Minute,':',d.Second); end.
program calc_days;
uses system;
var
D: DateTime;
begin
D := DateTime.Parse('15.03.2001');
writeln(D.Date);
writeln(DateTime.Now - D);
end.
Задача: вычислисть количество дней от определенной даты до сегодняшней. Используем механизм вычисления разницы дат. Затем, чтобы отделить количество дней из полученной строки проделаываем преобразование в строку, из строки копируем нужные нам символы-цифры, преобразуеум символы-цифры в число. С этим числом можно производить математические операции.
program calc_days1; uses system; var DT: DateTime; // тип для хранения даты DS: TimeSpan; // тип для разницы дат Tpos: byte; DSS1, DSs2: string; DSI, code: integer; begin DT := DateTime.Parse('15.03.2001'); writeln(DT.Date); writeln(DateTime.Now - DT); DS := DateTime.Now - DT; // вычисляем разницу дат writeln(TS.Days); DSS1 := DS.ToString; // переводим разницу дат в строку writeln(DSS1); Tpos := pos('.', DSS1); // находим позицию точки в строке writeln( 'point position is: ', Tpos); DSS2 := copy( DSS1, 1, Tpos - 1); // копируем подстроку с первой позиции до позиции точки writeln( 'days: ', DSS2); Val(DSS2, DSI, code); // преобразуем строку в число writeln( 'days+1: ', DSI + 1); end.
Задача: вычислисть количество дней от определенной даты до сегодняшней. Используем механизм вычисления разницы дат, для которого используется тип TimeSpan. Затем используем встроенную функцию, которая нам выдает количество дней. С этим числом можно производить математические операции.
program calc_days2; uses system; var DT: DateTime; TS: TimeSpan; // тип для разницы дат DDD: integer; begin DT := DateTime.Parse('15.03.2001'); // cтроку переводим в тип для даты writeln(DT.Date); writeln(DateTime.Now - DT); TS := DateTime.Now - DT; // вычисляем разницу дат writeln(TS.Days); DDD := TS.Days; // встроенная функция выдаёт количество дней из типа для разнцы дат writeln( 'days: ', DDD); writeln( 'days+1: ', DDD + 1); end.
program calc_date; uses system; var D: DateTime; begin writeln( 'tekushee vremya: ', DateTime.Now.Hour,':', DateTime.Now.Minute,':', DateTime.Now.Second,'.', DateTime.Now.Millisecond ); writeln( 'tekushaya data: ', DateTime.Now.Date ); D := DateTime.Parse( '02.10.2001' ); writeln( 'Дата из строки: ', D.Date ); end.
Код для FreePascal:
program calc_date; uses sysutils; var D, N: TDateTime; begin writeln( TimeToStr( StrToTime( '18:30' ) ) ); writeln( DateToStr( StrToDate( '02.10.2017' ) ) ); N := Now; writeln( 'tekushee vremya: ', TimeToStr( N ) ); writeln( 'tekushaya data: ', DateToStr( N ) ); writeln( 'tekushee vremya i data: ', DateTimeToStr( N ) ); D := StrToDate( '02.10.2001' ); writeln( 'raznitsa dat: ', DateToStr( N - D ) ); end.