[ erc kragujevac @ 30.05.2013. 15:01 ] @
Moze li mala pomoc:

Imam dva polja u koaj treba da se unosi vreme( posto nema neke timepicker komponente koaj bi nudila 24h vreme odradio sam sa CB i vreme je oblika hh:mm i podatke uzima sa SQL server-a( ako postavim nvarchar tip onda mi daje bas ovaku, a ako uzmem datetime moram da resim maskom na samom polju u upitu).

Poenta je da proveri vreme 1 i vreme2 ( pocetak i kraj) i ukoliko je kraj veci od pocetka da izracuna razliku u minutima.
U principu f-je compare i minutesbetween rade,ali imam 2 problema:

- ti minuti bi trebali da budu izracunati i prikazani kao integer tip
-kada racunam 06:02 do 06:10 daje mi 7 minuta,a kada odradim 06:02 do 07:10 daje mi 68 koliko i ocekujem.

gde je problem?
[ savkic @ 30.05.2013. 20:13 ] @
> - ti minuti bi trebali da budu izracunati i prikazani kao integer tip
> -kada racunam 06:02 do 06:10 daje mi 7 minuta,a kada odradim 06:02 do 07:10 daje mi 68 koliko i ocekujem.
> gde je problem?

Možda u zaokruženju, TDateTime je u osnovi double pa se možda tih 10 minuta čuva kao 9,9999.
[ erc kragujevac @ 31.05.2013. 11:40 ] @
Probao sam u labelu da upisujem i floattostr i inttostr.
Krajnje cudna situacija:

-Izmedju 00:06 i 13:45 javlja 808,a izmedju 00:06 i 13:46 pokazuje 810 kako bi i trebalo.

Pozdrav
[ savkic @ 31.05.2013. 13:56 ] @
> -Izmedju 00:06 i 13:45 javlja 808,a izmedju 00:06 i 13:46 pokazuje 810 kako bi i trebalo.

Verovatno zato što 13:45 vidi kao 13:44,999. Koju ti uopšte funkciju koristiš?

Evo kratkog primera koji radi kako treba (probano u D7).

Code:

var
  d1, d2, d3: TTime;
begin
  d1 := EncodeTime(0, 6, 0, 0);
  d2 := EncodeTime(13, 45, 0, 0);
  Caption := IntToStr(MinutesBetween(d2, d1));
end;

[ erc kragujevac @ 31.05.2013. 14:48 ] @
Delphi6,a f-ja je ista.
Samos to uzmem dve promenljive i dodelim izabrane vrednosti
IZ SQL mi vraca datetime u ovom formatu 30.05.2013 12:00:00 AM iako sam hteo da bude hh:mm.
Zato sam display componente podesio na hh:mm i punim dva polja pocetak i kraj :

starttime:=ADOQuery6.Fields.Fieldbyname('start').asdatetime; na change startime punim kontrolu
endtime:=ADOQuery7.Fields.Fieldbyname('end').asdatetime; na change endtime punim kontrolu

Na enter u sledece polje odradio sam

Label5.caption:=inttostr(MinutesBetween(starttime,endtime));
Labelu samo koristim da vidim koju vrednost vraca

Ima li smisla da stavim encode (ADOQuery6.Fields.Fieldbyname('start').asdatetime)


[ savkic @ 31.05.2013. 16:31 ] @
> IZ SQL mi vraca datetime u ovom formatu 30.05.2013 12:00:00 AM iako sam hteo da bude hh:mm.

SQL baza verovatno čuva datum u nekom internom obliku, kako će se prikazati zavisi od tebe (podešavanja u sistemu i u tvom programu).
Pogledaj SysUtils i ShortTimeFormat/LongTimeFormat.

> starttime:=ADOQuery6.Fields.Fieldbyname('start').asdatetime; na change startime punim kontrolu
> endtime:=ADOQuery7.Fields.Fieldbyname('end').asdatetime; na change endtime punim kontrolu

> Label5.caption:=inttostr(MinutesBetween(starttime,endtime));
> Labelu samo koristim da vidim koju vrednost vraca

Ubaci negde poziv za DecodeTime ili FormatDateTime('HH:MM:SS zzz') tako da tačno vidiš i sekunde i milisekunde.

> Ima li smisla da stavim encode (ADOQuery6.Fields.Fieldbyname('start').asdatetime)

Nisam razumeo.
[ erc kragujevac @ 31.05.2013. 20:23 ] @
Hvala.

Probao sam sve i svasta i negde pravi problem. U pomenutom slucaju cak i promenljiva float prikazuje 808 umesto 809.

Pogledacu podesavanaj sql servera,ali format je datetime .
Ne razumem tacno gde i kako treba da primenim DecodeTime ili FormatDateTime.
MinutesBetween racuan and float zapisom, bar tako prikazuje u kod-u.
Probao sam dekode od adoquery6...,ali javlaj problem izmedju Word i datetime.
Onda sam definisao promenljivu tipa word(nisam bas vican ovome) i probao da joj dodelim vrednost sa decode vrednostupita.asdatetime.

[ savkic @ 31.05.2013. 21:31 ] @
> Ne razumem tacno gde i kako treba da primenim DecodeTime ili FormatDateTime.

Na datumima koje si dobio iz baze, tako ćeš tačno videti šta je u bazi zapisano.
[ erc kragujevac @ 01.06.2013. 09:05 ] @
Probao sam decodetime(adoquery.fields.fieldbyname('start').asdatetime) ali javlja da ima mnogo parametara.
[ savkic @ 01.06.2013. 12:59 ] @
DecodeTime je deklarisan u SysUtils unitu:

procedure DecodeTime(const DateTime: TDateTime; var Hour, Min, Sec, MSec: Word);

Dakle, deklariši promenljive za sate, minute, sekunde i milisekunde i prosledi tvoj datum.
[ erc kragujevac @ 26.06.2013. 07:42 ] @
U principu program radi svoje,ali imamo dva zaglupa.

- Kako moze da se odradi da korisnik unese recimo 0 i da mu onda da sva vremena koja pocinju nulom, da bi se skratilo vreme unosa( ovako mora da ide niz klizac).
- U prilogu je slika drugog problema.
Trebalo bi mi nesto sto proverava razmak od 24 h jer za pocetak u 23:00,a kraj u 01:00 narednog dana daje pruku u prilogu. ne vidi da treba da predje u naredni dan i i obracuna vrema vec javlja da je kraj pre pocetka.
[ savkic @ 26.06.2013. 14:00 ] @
> - Kako moze da se odradi da korisnik unese recimo 0 i da mu onda da sva vremena koja pocinju nulom, da bi se skratilo vreme unosa( ovako mora da ide niz klizac).

Napuniš neki combobox sa svim vrednostima od 0 do 23.

> Trebalo bi mi nesto sto proverava razmak od 24 h jer za pocetak u 23:00,a kraj u 01:00 narednog dana daje pruku u prilogu. ne vidi da treba
> da predje u naredni dan i i obracuna vrema vec javlja da je kraj pre pocetka.

Interno ta vremena tretiraj kao datum, tako ćeš imati i znati tačno kada je šta počelo i završilo se.