Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 31 odgovor
  • 10.155 pregleda

Najnovija ↓

TimeSpam funkcija u Delphiju 7 15.12.2004. u 11:03 · pre 266 meseci #1
Da li neko ima ideju kako da resim sledeci problem......
date1 je ulazni parametar kada se neka aplikacija startovala (TDateTime)
date2 je ulazni parametar kada se ista aplikacija ugasila (TDateTime)
difference je broj godina, meseci, dana, sati, minuta. To jest koliko je gore pomenuta aplikacija radila.

U Delphi 7 nema TimeSpam, pa me interesuje neko drugo resenje....


Hvala.
Potpis
When the program is being tested, it is too late to make design changes.
Re: TimeSpam funkcija u Delphiju 7 15.12.2004. u 11:22 · pre 266 meseci #2
Probaj sa

difference := Date2 - Date1; // ako zelis difference u datetime formatu

Imas i funkcije

YearsBetween .... Months, Weeks, Days, Hours, Minutes .... SecondsBetween

ss.
Potpis
When something is hard to do, then it's not worth doing.
Re: TimeSpam funkcija u Delphiju 7 15.12.2004. u 11:43 · pre 266 meseci #3
Nisam bas siguran da to radi........
Code:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    Label3: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    date1, date2, difference  :  TDateTime;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
date1 := Now;
Label1.Caption := DateTimeToStr(date1);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
date2 := Now;
Label2.Caption := DateTimeToStr(date2);
difference := date2 - date1;
Label3.Caption := DateTimeToStr(difference);
end;

end.


Potpis
When the program is being tested, it is too late to make design changes.
Re: TimeSpam funkcija u Delphiju 7 15.12.2004. u 11:58 · pre 266 meseci #4
Radi ... ali ti koristi samo za vreme (jer datum se prikazuje od 31.12.1899).
Preporucujem ti u svakom slucaju ove druge funkcije.
Alternativno mozes da koristis DecodeDateTime funkciju, pa da 'rucno' oduzimas.

ss.
Potpis
When something is hard to do, then it's not worth doing.
Re: TimeSpam funkcija u Delphiju 7 15.12.2004. u 12:06 · pre 266 meseci #5
Ovako mozes da dobijes proteklo vreme u minutima

Code:

   StartDT := DateTimeToTimeSTamp (StartDateTime);
   EndDT := DateTimeToTimeSTamp (EndDateTime);
   Duration := ((EndDT.Date - StartDT.Date) * 60) +
                   ((EndDT.Time - StartDT.Time) / 1000 / 60)


Re: TimeSpam funkcija u Delphiju 7 15.12.2004. u 12:18 · pre 266 meseci #6
mislio sam da postoji neki TimeSpam ili tako nesto.... .da ne lomim na ruke..... Hvala u svakom slucaju........ ili sto bi rekao Patak Daca : "Hvala ni za sta....." :)
Potpis
When the program is being tested, it is too late to make design changes.
Re: TimeSpam funkcija u Delphiju 7 15.12.2004. u 12:21 · pre 266 meseci #7
nema na cemu :) uvek smo tu sa netacnim, nepotpunim i beskorisnim savetima ;)

ss.
Potpis
When something is hard to do, then it's not worth doing.
Re: TimeSpam funkcija u Delphiju 7 15.12.2004. u 13:26 · pre 266 meseci
izmenjeno 1 put, poslednji put neor 15.12.2004. u 13:57
  1. neor15.12.2004. u 13:57zapis iz teksta poruke
#8
Probaj ovako:

difference := date1 - date2 - 693959.0;
Re: TimeSpam funkcija u Delphiju 7 15.12.2004. u 13:27 · pre 266 meseci #9
zar ne moze samo da napravis razliku. TDateTime je nisa drugo do real tip, kad oduzmes dobices broj dana koji aplikacija radi i vreme je u razlomljenom delu.
Code:
 
  showMessage(FormatDateTime('DD days HH hours MM minutes and SS seconds', Now - StartDate))

trebalo bi da radi
Potpis
Ride the rainbow, crack the sky

DIY gitare, pojacala i efekti www.diy-fever.com
Re: TimeSpam funkcija u Delphiju 7 15.12.2004. u 14:02 · pre 266 meseci #10
Citat:
neor: Probaj ovako:

difference := date1 - date2 - 693959.0;

[Ovu poruku je menjao neor dana 15.12.2004. u 13:57 GMT+1]


Jesi li probao? :)
Znas li sta se desi nakon jednog dana? nakon 24h? :)
Potpis
When the program is being tested, it is too late to make design changes.
Re: TimeSpam funkcija u Delphiju 7 15.12.2004. u 14:13 · pre 266 meseci #11
A i meni je izgledalo kao dobra ideja.

@bancika: ne moze, jer datum ne pocinje od 0.0.0000 nego od 31.12.1899 tako da prosto oduzimanje ne dela. Zato je uveo neor ovu konstantu (malo uvecani DateDelta), ali ocigledno ne radi - ne vrti dane unapred.

ss.
Potpis
When something is hard to do, then it's not worth doing.
Re: TimeSpam funkcija u Delphiju 7 15.12.2004. u 16:20 · pre 266 meseci #12
Eh, datum stalno stoji na nuli :(
Sto je u stvari nedozvoljena vrednost za datum

Re: TimeSpam funkcija u Delphiju 7 15.12.2004. u 19:12 · pre 266 meseci #13
Probaj ovo:

Code:

procedure TimeSpan(StartDate, EndDate: TDateTime; Var Days, Hours, Min, Secs: integer);
Var
  temp: double;
begin
  Secs:= SecondsBetween(EndDate,StartDate);
  temp:= Secs / 86400;
  Days:= Trunc(temp); // Dani

  Secs:= Secs-(Days*86400);
  temp:= Secs / 3600;
  Hours:= Trunc(temp); // Sati

  Secs:= Secs-(Hours*3600);
  temp:= Secs/60;
  Min:= Trunc(temp); // Minuti

  Secs:= Secs-(Min*60); // Sekunde
end;

testiranje:

procedure TForm.Button1Click(Sender: TObject);
Var 
  Days, Hours, Min, Secs: integer;
begin
  TimeSpan(Now-5.5, Now, Days, Hours, Min, Secs);
  Caption:= Format('Razlika -> Dana: %d  Sati: %d  Minuta: %d Sekundi: %d', [Days, Hours, Min, Secs])
end;


Moguca je greska spod sekunde u duzim intervalima itd. Procitaj dokumentaciju za TDateTime ako te zanima detaljnije. Delphi ima unit DateUtils...
Re: TimeSpam funkcija u Delphiju 7 15.12.2004. u 21:22 · pre 266 meseci #14
cekaj, jasno da dani ne pocinju od 000, ali...

(a + delta) - (b + delta) = a - b

zar ne..tako da od kad god da pocinje, razlika mora da bude ista
Potpis
Ride the rainbow, crack the sky

DIY gitare, pojacala i efekti www.diy-fever.com
Re: TimeSpam funkcija u Delphiju 7 16.12.2004. u 09:48 · pre 266 meseci #15
koliko buke oko sitnice..

jednostavno oduzmi početno od krajnjeg vremena, i prikaži to sa:

Code:
Label3.Caption := TimeToStr(difference);


eventualno ako će intervali biti duži od 24h, samo dodaj i dane ispred:

Code:
Label3.Caption := IntToStr(Trunc(difference))+' days '+TimeToStr(difference);



ispisivanje "aplikacija je radila mesec dana" je besmisleno, jer to ništa ne znači. šta je "mesec dana"? 30 dana? 31? 28/29? ili možda 30.4366...

zato se to i ne radi tako kako si zamislio.. pogledaj recimo kako vreme ispisuje task manager.. ili network connection status dialog.. ili..
Potpis
blogče :: unescaped beta
  »
go-paste extenzija
  »
reč dana: backup
  »
bočne koalicije
Re: TimeSpam funkcija u Delphiju 7 16.12.2004. u 11:03 · pre 266 meseci #16
Citat:
-zombie-: koliko buke oko sitnice..

ispisivanje "aplikacija je radila mesec dana" je besmisleno, jer to ništa ne znači. šta je "mesec dana"? 30 dana? 31? 28/29? ili možda 30.4366...

..


To sto ti je besmisleno je upravo ono sto ja hocu da pokusam da odradim...... Bas hocu da znam da izracunam koja godina i koji mesec ima koliko dana i na osnovu toga parsiram rezultat. Za moju aplikaciju je veoma bitno da prikaze da je radila npr. 1 godina, 6 meseci, 15 dana, 13 sati, 48 minuta i 56 sekundi. U krajnjem slucaju i da je besmisleno shvati to kao vezbu......
Potpis
When the program is being tested, it is too late to make design changes.
Re: TimeSpam funkcija u Delphiju 7 16.12.2004. u 11:08 · pre 266 meseci #17
FireProxy pa dobio si dovoljno razlicitih ideja, sad mozes da vezbas :)
Nazalost, nema gotovo resenje.
Re: TimeSpam funkcija u Delphiju 7 16.12.2004. u 11:17 · pre 266 meseci #18
Pogresno si me shvatio...... ja ne trazim odgovor na pitanje..... otvorio sam diskusiju i nista vise....... na svim odgovorima hvala u svakom slucaju....... hteo sam da sagledam problem i iz drugog (necijeg) ugla.

Pozdrav svima.

P.S. Ako sam zvucao kao neko ko ocajnicki trazi da mu se resi problem i ko oce kod bez motike izvinjavam se. :)
Potpis
When the program is being tested, it is too late to make design changes.
Re: TimeSpam funkcija u Delphiju 7 16.12.2004. u 13:25 · pre 266 meseci #19
Citat:
FireProxy:
Za moju aplikaciju je veoma bitno da prikaze da je radila npr. 1 godina, 6 meseci, 15 dana, 13 sati, 48 minuta i 56 sekundi. U krajnjem slucaju i da je besmisleno shvati to kao vezbu......


baš me zanima za kakvu to aplikaciju to može da bude bitno.. a uostalom, i kao vežba je besmisleno.. evo ti pa vežbaj:

Proces A je radio od 1. januara u 00:00:00 tačno 29 dana, 0 sati, 0 minuta i 0 sekundi
Proces B je radio od 1. februara u 00:00:00 tačno 29 dana, 0 sati, 0 minuta i 0 sekundi.

moj program će ispisati:
Proces A je radio 29 dana, 00:00:00
Proces B je radio 29 dana, 00:00:00

tvoj će ispisati:
Proces A je radio 29 dana, 00:00:00
Proces B je radio 1 mesec, 0 dana, 00:00:00

(i to samo ako godina nije prestupna)

dakle, ubedi me da je ovo drugo poželjan (pravilan) izlaz bilo kog programa..
Potpis
blogče :: unescaped beta
  »
go-paste extenzija
  »
reč dana: backup
  »
bočne koalicije
Re: TimeSpam funkcija u Delphiju 7 16.12.2004. u 14:18 · pre 266 meseci #20
mozda sam ja glup pa ne shvatam sustinu problema. Sad sam otkucao da vidim zasto bi razlika od 1900 godina nesto znacila i pogodite - ne znaci nista. Posle startovanja aplikacije sam menjao sistemsko vreme za par sati, dana godina unapred i radilo je savrseno. pa da pitam ja jos jednom: u cemu je problem kod ove trivijalne stvari?

evo i koda:

Code:

var
  StartTime: TDateTime;

procedure TForm1.FormCreate(Sender: TObject);
begin
  StartTime := Now;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Label1.Caption := 'Program radi ' + IntToStr(Trunc(Now - StartTime)) + ' dana ' + FormatDateTime('HH "sati" MM "minuta" SS "sekundi"', Now - StartTime);
end;
Potpis
Ride the rainbow, crack the sky

DIY gitare, pojacala i efekti www.diy-fever.com
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme