Страница 2 из 3
Re: Генератор дат, нужна помощь
Добавлено: 06.01.2011 17:03:36
Ravil
Буду допиливать первый вариант. Спасибо за помощь.
Re: Генератор дат, нужна помощь
Добавлено: 06.01.2011 17:14:57
Nik
Padre_Mortius писал(а):С UnixToDateTime точно не будет работать
А куда оно денется? Генерим int-число в нужном диапазоне, преобразуем в дату, при необходимости - форматируем, отрезая время.
Re: Генератор дат, нужна помощь
Добавлено: 06.01.2011 17:47:07
Ravil
"преобразуем в дату" - а можно подробнее.
Re: Генератор дат, нужна помощь
Добавлено: 06.01.2011 18:08:50
alexs
Ravil
Посмотри - как объявлен тип TDateTime. Там нет ни какой магии - на самом деле - это число дней, прошедшее с определённой даты.
Дробная часть - это время в сутках.
Re: Генератор дат, нужна помощь
Добавлено: 06.01.2011 19:51:15
Nik
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;
Что они делают, думаю, понятно.
Re: Генератор дат, нужна помощь
Добавлено: 06.01.2011 20:04:15
Vadim
RavilPackTime() - UnpackTime(). По-моему в TurboPascal это было. В модуле DOS.
Добавлено спустя 11 минут 8 секунд:Код: Выделить всё
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.
Re: Генератор дат, нужна помощь
Добавлено: 06.01.2011 22:24:39
Ravil
Спасибо большое. Может посоветуете книгу, ссылку на скачку книги для изучения Pascal.
Добавлено спустя 15 минут 58 секунд:Так тоже можно:
Код: Выделить всё
Uses Dos;
Var
dt: DateTime;
ut: LongInt;
Begin
Randomize;
ut:=Random(4102358400) ;
UnpackTime(ut, dt);
//Выводим полученную дату на экран
WriteLn(dt.Day, '.', dt.Month, '.', dt.Year);
End.
Добавлено спустя 10 минут 10 секунд:А как сделать, чтобы год выводился двумя цифрами?
Добавлено спустя 31 минуту 37 секунд:Прога выдала 11.14.2037 - почему?
Re: Генератор дат, нужна помощь
Добавлено: 06.01.2011 23:30:52
Nik
Если нужна книга по FreePascal/Lazarus - то вот, например:
viewtopic.php?f=5&t=6346&p=48473&hilit=%D0%BA%D0%BD%D0%B8%D0%B3%D0%B0#p48473Подозреваю, что виновата функция UnpackTime.
Re: Генератор дат, нужна помощь
Добавлено: 07.01.2011 02:00:23
Иван Шихалев
Не могу не заметить, что ссылка
http://freepascal.ru/download/pdf/osnov ... azarus.pdf есть на главной странице FreePascal.ru...
Re: Генератор дат, нужна помощь
Добавлено: 07.01.2011 04:53:55
Vadim
Ravil писал(а):Прога выдала 11.14.2037 - почему?
Дело в том, что процедуры Pack\UnpackTime не проверяют формат даты на правильность. Так что Вам нужна дополнительная функция проверки. Что-то типа:
Код: Выделить всё
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;
Плюс проверка года на високосность, дабы не упустить 29 февраля.
Ravil писал(а):А как сделать, чтобы год выводился двумя цифрами?
Если у Вас широкий диапазон дат, то это неразумно, т.к. Вы не сможете отличить год 2000 от года 2100.
Re: Генератор дат, нужна помощь
Добавлено: 07.01.2011 10:20:48
Ravil
Проще допилить первый вариант. Спасибо за помощь.
Re: Генератор дат, нужна помощь
Добавлено: 07.01.2011 10:33:43
Vadim
Ravil
А Вы поняли, в чём была проблема с Вашим первым вариантом?
Re: Генератор дат, нужна помощь
Добавлено: 07.01.2011 14:14:37
dunin
Vadim писал(а):...
Дело в том, что процедуры Pack\UnpackTime не проверяют формат даты на правильность. Так что Вам нужна дополнительная функция проверки. Что-то типа:
...
Функция конвертации строки в дату/время с проверкой валидности даты:
TryStrToDateTime
Re: Генератор дат, нужна помощь
Добавлено: 07.01.2011 14:36:36
Ravil
Нужно типы состыковать.
Re: Генератор дат, нужна помощь
Добавлено: 07.01.2011 14:41:38
Vadim
duninЧеловека заставляют пользоваться вымершими динозаврами - ТР.
