Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.07.2012, 23:58   #1
igrok111
Форумчанин
 
Регистрация: 12.07.2012
Сообщений: 140
По умолчанию Сколько времени прошло с момента предыдущего запуска проги?

Есть прога, написаная на Делфи ХЕ. Нужно определить, сколько времени (можно в минутах) прошло с момента предыдущего запуска.
Есть идея. На форме есть едит, при запуске проги в него копируеться текущая дата и время функией function Time: TDateTime;
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Text := DateTimeToStr(Now);
end;
Потом текст из едита записуеться в тектовый файл. При следующем запуске проги - в едит береться новое время и дата, и каким-то образом дожно сравниться со старым в текстовом файле.
Можно ли допустим время сразу перевести в минуты, а потом новый показатель отнять от предыдущего.
Вот как можно перевести 18.07.2012 23:25:27 - в минуты?
Или есть другой способ?
igrok111 вне форума Ответить с цитированием
Старый 19.07.2012, 00:55   #2
Lesha
Форумчанин
 
Аватар для Lesha
 
Регистрация: 30.01.2009
Сообщений: 418
По умолчанию

unixtimestamp
Lesha вне форума Ответить с цитированием
Старый 19.07.2012, 01:07   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

TDateTime поддается вычитанию.
+ есть функции типа MinutesBetween
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.07.2012, 14:20   #4
igrok111
Форумчанин
 
Регистрация: 12.07.2012
Сообщений: 140
По умолчанию

Я сделал так для примера. При нажатии button1 в edit1 записываеться дата и время в даную секунду. Потом через несколько секунд я нажимаю button2 и в edit2 записываеться еще одна(новая дата) в эту же секунду. Получаються 2 даты в двух эдитах. Теперь при нажатии button3 нужно отнять edit2 минус edit1 - результат получить в днях или минутах - и вывести в edit3.
Код:
var
Form1: TForm1;
S: extended;
d1, d2: TDatetime;
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
d1 := Now;
edit1.Text:=datetimetostr(d1);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
d2 := Now;
edit2.Text:=datetimetostr(d2);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
S:= d2-d1;
EDIT3.Text:=dateToStr(S);
end;
В итоге результат:
30.12.1899

Что не так?


Если
Код:
S:= trunc(d2) - trunc(d1); 
EDIT3.Text:=dateToStr(S);
Результат тот же

Последний раз редактировалось igrok111; 19.07.2012 в 14:25.
igrok111 вне форума Ответить с цитированием
Старый 19.07.2012, 14:44   #5
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сколько времени прошло с момента предыдущего запуска проги?
Невозможно определить без синхронизации с внешними счетчиками времени (например, специальным сервером).
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 19.07.2012, 15:54   #6
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text := IntToStr(GetTickCount);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Edit2.Text := IntToStr(GetTickCount);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  Edit3.Text := IntToStr((StrToInt(Edit2.Text) - StrToInt(Edit1.Text))); // Миллисекунд
end;
Не?
Shouldercannon вне форума Ответить с цитированием
Старый 19.07.2012, 16:04   #7
igrok111
Форумчанин
 
Регистрация: 12.07.2012
Сообщений: 140
По умолчанию

Цитата:
Сообщение от Shouldercannon Посмотреть сообщение
Не?
Очень даже ДА! Спасибо
А не подскажите, миллисекунды - это 1000 млс = 1 секунда примерно - да?
igrok111 вне форума Ответить с цитированием
Старый 19.07.2012, 16:06   #8
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

1000 мс = 1 с
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

const
  SecPerDay = 86400;
  SecPerHour = 3600;
  SecPerMinute = 60;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button2: TButton;
    Button3: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function SecondToTimeStr(const Seconds: Cardinal): string;
var
  d, h, m, s: Cardinal;
  Time: string;
begin
  d := Seconds div SecPerDay;
  h := (Seconds mod SecPerDay) div SecPerHour;
  m := ((Seconds mod SecPerDay) mod SecPerHour) div SecPerMinute;
  s := ((Seconds mod SecPerDay) mod SecPerHour) mod SecPerMinute;

  Time := Format('%0:2.2d:%1:2.2d:%2:2.2d:%3:2.2d:', [d, h, m, s]);

  while Pos(':', Time) <> 0 do
  begin
    Result := Result + Copy(Time, 1, Pos(':', Time) - 1) + '%s';
    Delete(Time, 1, Pos(':', Time));
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text := IntToStr(GetTickCount);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Edit2.Text := IntToStr(GetTickCount);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  Edit3.Text := IntToStr((StrToInt(Edit2.Text) - StrToInt(Edit1.Text)) div 1000{Избавляемся от милисекунд}); // Миллисекунд
  Label1.Caption := Format(SecondToTimeStr(StrToInt(Edit3.Text)), [' дней ', ' часов ', ' минут ', ' секунд ']);
end;

end.

Последний раз редактировалось Shouldercannon; 19.07.2012 в 16:52.
Shouldercannon вне форума Ответить с цитированием
Старый 19.07.2012, 20:00   #9
igrok111
Форумчанин
 
Регистрация: 12.07.2012
Сообщений: 140
По умолчанию

Спасибо.
А такая прога покажет допустим результат, если прошол месяц - то так и выбьет прошло допустим 35 дней 5 часов и так далие? Или есть лимит?
igrok111 вне форума Ответить с цитированием
Старый 19.07.2012, 21:14   #10
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Цитата:
Сообщение от igrok111 Посмотреть сообщение
Спасибо.
А такая прога покажет допустим результат, если прошол месяц - то так и выбьет прошло допустим 35 дней 5 часов и так далие? Или есть лимит?
Хоть 1000 дней при непрырывой работе Windows, но у способа есть минус. GetTickCount - это количество времени прошедшего после запуска Windows. Тогда действительно лучше цепляться за дату (01.01.2012 00:00:00).
Shouldercannon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сколько часов, минут и секунд прошло от начала суток до поворота часовой стрелки часов на f градусов (нужна блок-схема) lady.ulumba Помощь студентам 5 08.09.2011 15:08
Бейсик. Вычисление момента инерции,момента сопротивления площади поперечного сечения для кольца kostia-92 Помощь студентам 0 26.06.2011 09:58
[PHP] Как узнать сколько прошло времени? RESPECT8 PHP 1 24.10.2010 09:43
Сколько стоит такая программка? И сколько по времени её сделать? Палыч I Фриланс 8 10.09.2010 16:23
Вывести на экран монитора сколько прошло дней с нового года На С++ K[Lanc]N Помощь студентам 3 18.02.2009 21:06