Delphi
Варіант 1:
program DateBetween;
{$APPTYPE CONSOLE}
uses
System.SysUtils,
System.DateUtils;
var
AUnixTime: Int64;
ADate: TDateTime;
begin
try
Read(AUnixTime); // читаємо цифри
ADate := UnixToDateTime(AUnixTime); // конвертуємо
WriteLn(DateTimeToStr(ADate)); // напишемо що це за дата
if YearsBetween(Date, ADate) > 0 then // якщо різниця більша за 0 років
WriteLn(IntToStr(YearsBetween(Date, ADate)) + 'р. назад') // то виводимо в роках
else if MonthsBetween(Date, ADate) > 0 then
WriteLn(IntToStr(MonthsBetween(Date, ADate)) + 'м. назад')
else if DaysBetween(Date, ADate) > 0 then
WriteLn(IntToStr(DaysBetween(Date, ADate)) + 'д. назад')
else if HoursBetween(Date, ADate) > 0 then
WriteLn(IntToStr(HoursBetween(Date, ADate)) + 'г. назад')
else if MinutesBetween(Date, ADate) > 0 then
WriteLn(IntToStr(MinutesBetween(Date, ADate)) + 'х. назад');
except // стандартний блок для виведення помилок
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
На дату "1234567890" видає наступне:
13.02.2009 23:31:30
4р. назад
Варіант 2:
program DateBetween;
{$APPTYPE CONSOLE}
uses
System.SysUtils,
System.DateUtils;
type // перелік потрібних перемінних
TBetweenIn = (boYears, boMonths, boDays, boHours, boMinutes, boSeconds);
function GetBetween(ANow, AThen: TDateTime; BetweenIn: TBetweenIn): Int64;
begin
case BetweenIn of
boYears: Result := YearsBetween(ANow, AThen);
boMonths: Result := MonthsBetween(ANow, AThen);
boDays: Result := DaysBetween(ANow, AThen);
boHours: Result := HoursBetween(ANow, AThen);
boMinutes: Result := MinutesBetween(ANow, AThen);
boSeconds: Result := SecondsBetween(ANow, AThen);
end;
if ANow < AThen then // минуле чи майбутнє?
Result := - Result
end;
const // позначки...
BeforeAfterStr: array [Boolean] of string = ('назад', 'залишилось');
ALabels: array [TBetweenIn] of string = ('р.', 'м.', 'д.', 'г.', 'м.', 'с.');
var
AUnixTime, tmp: Int64;
ADate: TDateTime;
I: TBetweenIn;
begin
try
Read(AUnixTime); // читаємо дані...
ADate := UnixToDateTime(AUnixTime); // конвертуємо
WriteLn(DateTimeToStr(ADate)); // виведемо що вийшло
for I := Low(TBetweenIn) to High(TBetweenIn) do // підбираєм що підходить
if GetBetween(Date, ADate, I) <> 0 then
begin
tmp := GetBetween(Date, ADate, I);
WriteLn(Format('%d %s %s', [Abs(tmp), ALabels[i], BeforeAfterStr[tmp < 0]]));
Break;
end;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.