Модератор: Модераторы

Padre_Mortius писал(а):С UnixToDateTime точно не будет работать



Ravil писал(а):"преобразуем в дату" - а можно подробнее.
const
  SecPerDay    =  86400;
  Offset1970  =  25569;
function UnixTimeToDateTime(UnixTime :  LongInt): TDate;
begin
  Result:= UnixTime / SecPerDay + Offset1970;
end;
function DateTimeToUnixTime(DelphiDate: TDate): LongInt;
begin
  Result:= Trunc((DelphiDate - Offset1970) * SecPerDay);
end;
Uses Dos;
Var
  dt: DateTime;
  ut: LongInt;
Begin
  Randomize;
  //Задаём максимальную дату
  dt.Year:=2100;
  dt.Month:=12;
  dt.Day:=31;
  //Генерируем дату
  PackTime(dt, ut);
  ut:=Random(ut);
  UnpackTime(ut, dt);
  //Выводим полученную дату на экран
  WriteLn(dt.Day, '.', dt.Month, '.', dt.Year);
End.Uses Dos;
Var
  dt: DateTime;
  ut: LongInt;
Begin
  Randomize;
  ut:=Random(4102358400) ;
  UnpackTime(ut, dt);
  //Выводим полученную дату на экран
  WriteLn(dt.Day, '.', dt.Month, '.', dt.Year);
End.
Прога выдала 11.14.2037 - почему?

Ravil писал(а):Прога выдала 11.14.2037 - почему?
If dt.Month>12 Then dt.Month:=12;
Case dt.Month of
  1,3,5,7,8,10,12: If dt.Day>31 Then dt.Day:=31;
  4,6,9,11: If dt.Day>30 Then dt.Day:=30;
  2: If dt.Day>28 Then dt.Day:=28;
end;Ravil писал(а):А как сделать, чтобы год выводился двумя цифрами?

Vadim писал(а):...
Дело в том, что процедуры Pack\UnpackTime не проверяют формат даты на правильность. Так что Вам нужна дополнительная функция проверки. Что-то типа:
...



Вернуться в Обучение Free Pascal
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1