Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
saat toplama
#1
Merhaba,

Bir alanım var CalismaSaati adında buraya girilen değerlerini toplamını almak istiyorum,

Örneğin: 
15:50:10
20:15:10

Toplam : 36:05:20

Şeklinde nasıl yapabilirim aşağıdaki kod ile saati toplayabiliyorum fakat dakikayı 65 yazıyor.

Teşekkürler.

var
 Bookmark: TBookmark;
 ToplamCalisma: TTime;
 Saat, Dakika, Saniye, MiliSaniye: Word;
 TSaat, TDakika, TSaniye, TMiliSaniye: Double;
begin
 TSaat := 0;
 TDakika := 0;
 TSaniye := 0;
 TMiliSaniye := 0;
 LabelCalismaSaati.Caption := '';
 DM.SoforFisKayitDB.Open;
 Bookmark := DM.SoforFisKayitDB.GetBookmark;
 DM.SoforFisKayitDB.DisableControls;

 try
   DM.SoforFisKayitDB.First;
   while not DM.SoforFisKayitDB.EOF do
   begin
     DecodeTime(DM.SoforFisKayitDB.FieldByName('CalismaSaati').AsDateTime, Saat, Dakika, Saniye, MiliSaniye);
     TSaat := TSaat + Saat;
     TDakika := TDakika + (Dakika / 60);
     TSaniye := TSaniye + (Saniye / 3600);
     TMiliSaniye := TMiliSaniye + MiliSaniye;

     DM.SoforFisKayitDB.Next;

   end;
 finally
   DM.SoforFisKayitDB.GotoBookmark(Bookmark);
   DM.SoforFisKayitDB.FreeBookmark(Bookmark);
   DM.SoforFisKayitDB.EnableControls;

   ShowMessage(FloatToStr(TSaat));
   ShowMessage(FloatToStr(TDakika));
   ShowMessage(FloatToStr(TSaniye));
{
   LabelCalismaSaati.Caption := 'Toplam Çalışma Saati : ' + DateTimeToStr(ToplamSaat) + ' Saat';
   LabelToplamFis.Caption := ' Kayıt Sayısı : ' + IntToStr(DM.SoforFisKayitDB.RecordCount) + ' Adet';}
 end;
Cevapla
#2
(24-12-2020, Saat: 11:20)erdogan Adlı Kullanıcıdan Alıntı: Merhaba,

Bir alanım var CalismaSaati adında buraya girilen değerlerini toplamını almak istiyorum,

Örneğin: 
15:50:10
20:15:10

Toplam : 36:05:20

Şeklinde nasıl yapabilirim aşağıdaki kod ile saati toplayabiliyorum fakat dakikayı 65 yazıyor.

Teşekkürler.

var
 Bookmark: TBookmark;
 ToplamCalisma: TTime;
 Saat, Dakika, Saniye, MiliSaniye: Word;
 TSaat, TDakika, TSaniye, TMiliSaniye: Double;
begin
 TSaat := 0;
 TDakika := 0;
 TSaniye := 0;
 TMiliSaniye := 0;
 LabelCalismaSaati.Caption := '';
 DM.SoforFisKayitDB.Open;
 Bookmark := DM.SoforFisKayitDB.GetBookmark;
 DM.SoforFisKayitDB.DisableControls;

 try
   DM.SoforFisKayitDB.First;
   while not DM.SoforFisKayitDB.EOF do
   begin
     DecodeTime(DM.SoforFisKayitDB.FieldByName('CalismaSaati').AsDateTime, Saat, Dakika, Saniye, MiliSaniye);
     TSaat := TSaat + Saat;
     TDakika := TDakika + (Dakika / 60);
     TSaniye := TSaniye + (Saniye / 3600);
     TMiliSaniye := TMiliSaniye + MiliSaniye;

     DM.SoforFisKayitDB.Next;

   end;
 finally
   DM.SoforFisKayitDB.GotoBookmark(Bookmark);
   DM.SoforFisKayitDB.FreeBookmark(Bookmark);
   DM.SoforFisKayitDB.EnableControls;

   ShowMessage(FloatToStr(TSaat));
   ShowMessage(FloatToStr(TDakika));
   ShowMessage(FloatToStr(TSaniye));
{
   LabelCalismaSaati.Caption := 'Toplam Çalışma Saati : ' + DateTimeToStr(ToplamSaat) + ' Saat';
   LabelToplamFis.Caption := ' Kayıt Sayısı : ' + IntToStr(DM.SoforFisKayitDB.RecordCount) + ' Adet';}
 end;

    TSaat := Saat;
    TDakika := Dakika;
    TSaniye := Saniye;
    TMiliSaniye := MiliSaniye;
Cevapla
#3
Merhaba,

iki saatin toplamıda olabilir

caption:= TimeToStr(cxCalismaSaati.Time + cxBeklemeSaati.Time);
Cevapla
#4
(24-12-2020, Saat: 13:49)erdogan Adlı Kullanıcıdan Alıntı: Merhaba,

iki saatin toplamıda olabilir

caption:= TimeToStr(cxCalismaSaati.Time + cxBeklemeSaati.Time);

Kendi yazdığım ve projelerimde kullandığım kütüphanemden üç fonksiyon aşağıdadır. Olduğu gibi kullanabilirsin ya da üzerinde oynayarak istediğini yaparsın.


function RightPad(S: string; Ch: Char; Len: Integer): string;
var
  RestLen: Integer;
begin
  Result  := S;
  RestLen := Len - Length(s);
  if RestLen < 1 then Exit;
  Result := StringOfChar(Ch, RestLen) + S;
end;

function FloatToHHMM(sFloat: Double): string;
begin
 Result := '';
if Trunc(sFloat) > 0 then
   Result := Result + RightPad(IntToStr(Trunc(sFloat)),'0', 2) +':'
 else
   Result := Result + '00:';

 if Trunc(Frac(sFloat) * 60) > 0 then
   Result := Result + RightPad(IntToStr(Round(Frac(sFloat) * 60)),'0', 2)
 else
   Result := Result + '00';
 Result := Trim(Result);
end;

function FloatToHHMMSS(sFloat: Double): string;
begin
 Result :=
  IntToStr(Trunc(sFloat) div 60) +':' +
   RightPad(IntToStr(Trunc(sFloat) mod 60),'0', 2) +':' +
   RightPad(IntToStr(Round(Frac(sFloat) * 60)),'0', 2);
end;
Cevapla
#5
çok teşekkür ederim,

kullanımı nasıl acaba ?

Merhaba

bir örnek vermeniz mümkün mü acaba

Teşekkürler
Cevapla
#6
(24-12-2020, Saat: 14:22)erdogan Adlı Kullanıcıdan Alıntı: çok teşekkür ederim,

kullanımı nasıl acaba ?

Merhaba

bir örnek vermeniz mümkün mü acaba

Teşekkürler

caption:= FloatToHHMM(cxCalismaSaati.Time + cxBeklemeSaati.Time);
Cevapla
#7
Doğru sonuç vermiyor Sad

11:00:00 + 11:00:00

sonuç : 00:55
Cevapla
#8
(24-12-2020, Saat: 15:06)erdogan Adlı Kullanıcıdan Alıntı: Doğru sonuç vermiyor Sad

11:00:00 + 11:00:00

sonuç :  00:55

caption:= FloatToHHMM((cxCalismaSaati.Time + cxBeklemeSaati.Time)*24);
Cevapla
#9
aşağıdaki linkte hourspan ve timespan var ancak uses e dateutils, TimeSpan, hourspan eklemek lazım, bunlar tam olarak işinizi görür.

https://stackoverflow.com/questions/2578...ing-delphi

https://www.tek-tips.com/viewthread.cfm?qid=602869
Cevapla
#10
(24-12-2020, Saat: 15:23)bibilen Adlı Kullanıcıdan Alıntı:
(24-12-2020, Saat: 15:06)erdogan Adlı Kullanıcıdan Alıntı: Doğru sonuç vermiyor Sad

11:00:00 + 11:00:00

sonuç :  00:55

caption:= FloatToHHMM((cxCalismaSaati.Time + cxBeklemeSaati.Time)*24);

Çok Teşekkür Ederim.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphide time alanını toplama shooterman 3 538 14-09-2023, Saat: 13:03
Son Yorum: shooterman
  farkli tablolardan verileri dataset e toplama sadikacar60 12 1.872 23-03-2023, Saat: 18:34
Son Yorum: sadikacar60
  delphi mssql toplama yunusemre 13 3.275 30-04-2022, Saat: 23:37
Son Yorum: dilanorkan
  Gün dönümü olan bir randevu sisteminde saat bazlı kapama nasıl yapılır ? adelphiforumz 4 1.845 06-05-2021, Saat: 09:48
Son Yorum: adelphiforumz
  Balirli saat aralığında kodu çalıştırmak onurakman 13 6.679 21-05-2020, Saat: 18:01
Son Yorum: mrmarman



Konuyu Okuyanlar: 1 Ziyaretçi