Модератор: Модераторы
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
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3