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.

Рейтинг

Проблемы с госуслугами, медленный интернет или плохая связь? Напишите об этом — Минцифры поможет с решением