Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с датами. 
V
    Опции темы
gambit
Дата 27.3.2007, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: нет
Всего: 40



Как сдельть: при запуске прога проверяет дату, и если она стала более ранней(те ее перевели назад) то прога не запускается. Я понимаю что надо и текущей даты вычесть предыдущую, но тогда прога запускается только раз в день, а как это сделать с временем я не знаю, потому что с датой есть число 30.12.1899 от которого можно отталкиваться, а  со временем не так.
PM MAIL ICQ Skype   Вверх
aktuba
Дата 27.3.2007, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 7
Всего: 38



Код

uses
  DateUtils;
...
function CheckDate(ADate1, ADate2: TDateTime): Boolean;
begin
  Result := StartOfTheDay(ADate1) - StartOfTheDay(ADate2) > 0;
end;


Это сообщение отредактировал(а) aktuba - 27.3.2007, 21:36


--------------------
user posted image
PM MAIL WWW Skype   Вверх
gambit
Дата 28.3.2007, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: нет
Всего: 40



aktuba, твой код не работает. Точнее он работает, но также как и мой вариант, он работает только если число поменялось. А если прогу запускают в этот же день то она не работает. 
PM MAIL ICQ Skype   Вверх
aktuba
Дата 28.3.2007, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 7
Всего: 38



Цитата

aktuba, твой код не работает. Точнее он работает, но также как и мой вариант, он работает только если число поменялось. А если прогу запускают в этот же день то она не работает. 


Объясни подробнее, что тебе надо... Я например уже запутался... Тебе надо, чтобы прога не работала, если дату перевели назад или если время перевели назад?




--------------------
user posted image
PM MAIL WWW Skype   Вверх
Snowy
Дата 28.3.2007, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Код

function GetRealDate: TDateTime;
var
  sr: TSearchRec;
  s:  string;
  st: TSystemTime;
  dt: TDateTime;
begin
  SetLength(s, MAX_PATH); result := 0;
  GetWindowsDirectory(PChar(s), MAX_PATH);
  s := PChar(s) + '\';
  if FindFirst(s + '*.*', faAnyFile, sr) = 0 then
    repeat
      FileTimeToSystemTime(sr.FindData.ftLastWriteTime, st);
      dt := SystemTimeToDateTime(st);
      if dt > result then result := dt;
    until FindNext(sr) <> 0;
  FindClose(sr);
  if result = 0 then result := now;
  result := Trunc(result);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption := DateToStr(now); // Текущая дата
  Label2.Caption := DateToStr(GetRealDate); // реальная дата
  if now < GetRealDate then Label3.Caption := 'Дату перевели назад';
end;

PM MAIL   Вверх
gambit
Дата 28.3.2007, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: нет
Всего: 40



Snowy, сейчас нет под рукой delphi поэтому твой варианот пока не пробовал.

aktuba, моя прога работает с документами, и во многие вставляет текущую дату. А я не хочу чтоб была возможность добавлять документы старыми датами(те фальшивые документы). Поэтому надо чтоб работало с датами, но если работать только с датами(без времени), то получается, что при выключении прога запоминает текущую дату. И при запуске проверяет ее с новой датой, но если прога запущена в этот же день то пулучается что
Код

result:=текущая дата-текущая дата

В итоге result =0 и прога не запускается.
PM MAIL ICQ Skype   Вверх
aktuba
Дата 28.3.2007, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 7
Всего: 38



Код

uses
  DateUtils;
...
function CheckDate(ADate: TDateTime): Boolean;
var
  y, m, d, hh, mm, ss, ms: Word;
  tempDate: TDateTime;
begin
  DecodeDateTime(IncDay(Now, -1), y, m, d, hh, mm, ss, ms);
  tempDate := EncodeDateTime(y, m, d, 23, 59, 59, 0);
  Result := StartOfTheDay(ADate) - tempDate > 0;
end;



--------------------
user posted image
PM MAIL WWW Skype   Вверх
gambit
Дата 29.3.2007, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: нет
Всего: 40



Snowy, твой вариант идеален, только объясни откуда берется реальное время, если системное переставлено.

Добавлено через 12 минут и 44 секунды
Сегодня 29 прога запускается, ставлю 28 прога запускается, и только если я ставлю 27 он пишет что дату переставили.
PM MAIL ICQ Skype   Вверх
Snowy
Дата 29.3.2007, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Вариант срабатывает, если компьютер на ночь выключался.
Если нет, то возможно отставание.
Реальная дата вычисляется по дате модификации системных файлов.
Если на компьютере не работали, то они не модифицируются. Если немного поработать, то задержка ликвидируется.
Звиняйте - более надёжный способ только синхронизация по сети.
PM MAIL   Вверх
gambit
Дата 29.3.2007, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: нет
Всего: 40



Цитата(Snowy @  29.3.2007,  10:55 Найти цитируемый пост)
Звиняйте - более надёжный способ только синхронизация по сети. 

Незачно звинять, твой метод шикарный.
PM MAIL ICQ Skype   Вверх
Alexeis
Дата 29.3.2007, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



Думаю можно даже обойтись без поиска а проверить дату изменения одного файлов реестра. Реестр всегда меняется от запуска к запуску.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Snowy
Дата 29.3.2007, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Цитата(Alexeis @  29.3.2007,  11:38 Найти цитируемый пост)
Думаю можно даже обойтись без поиска а проверить дату изменения одного файлов реестра. Реестр всегда меняется от запуска к запуску.
Вот именно ;-)
Реестр меняется постоянно.
И при переводе даты, мы получим то же значение. А нам нужно реальное.
Ибо, если мы переведём дату, то в ту же секунду реестр модифицируется и будет показывать уже переведённую...
Можно конечно ограничить набор поиска - сканить только логи.
Но лучше просканить всё - это много времени не займёт  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0649 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.