Kümülatif saat toplamı

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
theaviator
Üye
Mesajlar: 11
Kayıt: 01 Oca 2009 04:59

Kümülatif saat toplamı

Mesaj gönderen theaviator »

Merhaba,

var toplam:Tdatetime;
begin
//Toplam uçuşun bulunması
toplam:=0;
ADOTable1.First;
while (Not ADOTable1.Eof) do
begin
toplam:= toplam + ADOTable1.FieldByName('US').AsDateTime;
ADOTable1.Next;
end;
toplamucus.Text:=FormatDateTime('hh:nn',toplam);

Yukarıdaki kodla sütundaki saat değerlerini toplayabiiliyorum. Fakat sonucu bana kümülatif olarak vermiyor. Yani eğer saat değerleri toplamı 24:00'dan fazla olursa (diyelim ki 26:45) toplam değeri 02:45 olarak gösteriyor. Ben ise 26:45 olarak göstermek istiyorum. Nasıl yapabiliriz?

Teşekkürler,
qamyoncu
Üye
Mesajlar: 266
Kayıt: 12 Tem 2008 04:30

Re: Kümülatif saat toplamı

Mesaj gönderen qamyoncu »

Kod: Tümünü seç

var toplam:Tdatetime;
toplamold: TDateTime;
carry: Integer;
begin
//Toplam uçuşun bulunması
toplam:=0;
toplamold:=0;
carry:=0;
ADOTable1.First;
while (Not ADOTable1.Eof) do
begin
toplamold:=toplam;
toplam:= toplam + ADOTable1.FieldByName('US').AsDateTime;
if (Toplam<Toplamold) or (Toplam<ADOTable1.FieldByName('US').AsDateTime) then
   inc(carry);
ADOTable1.Next;
end;
toplamucus.Text:=FormatDateTime('hh:nn',toplam);

carry kadar sıfırlanmıştır süremiz. birşekilde carry kadar 24 saat eklersen istediğini elde edersin sanırım.
emin değilim DateTime '<' '>' operatörleriyle kıyaslanabiliyor mu, comparedate diye de birşey olmalı yanlış hatırlamıyorsam.
kolay gelsin
Batuhan TAŞDÖVEN
'Yükseldikçe küçülen bir uçurtma..'
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Kümülatif saat toplamı

Mesaj gönderen mrmarman »

Öncelikler aşağıdaki bahsettiğim hesabı yapabilmek için DateUtils unitini USES satırına ekleyiniz. Umuyorum veritabanınızdaki US alanına sadece saat giriyor, tarih girmiyorsunuzdur. Çünkü en az bir tarih girerseniz MinutesBetween kullanılan 0 ile toplam aralığındaki hesap gerçekten uçuşa geçecektir. 8)

Kod: Tümünü seç

var 
  Saat, Dakika : Integer;
  Toplam : TDateTime;
begin
//Toplam uçuşun bulunması
  Toplam:=0;
  ADOTable1.First;
  while (Not ADOTable1.Eof) do
  begin
    Toplam := Toplam + ADOTable1.FieldByName('US').AsDateTime;
    ADOTable1.Next;
  end;
  Dakika := MinutesBetween( 0, Toplam );
  Saat   := Dakika div 60;
  Dakika := Dakika - (Saat * 60);
  ToplamUcus.Text := Format('%.2d:%.2d', [ Saat, Dakika ] );
end;
Resim
Resim ....Resim
theaviator
Üye
Mesajlar: 11
Kayıt: 01 Oca 2009 04:59

Re: Kümülatif saat toplamı

Mesaj gönderen theaviator »

mrmarman yazdı:Öncelikler aşağıdaki bahsettiğim hesabı yapabilmek için DateUtils unitini USES satırına ekleyiniz. Umuyorum veritabanınızdaki US alanına sadece saat giriyor, tarih girmiyorsunuzdur. Çünkü en az bir tarih girerseniz MinutesBetween kullanılan 0 ile toplam aralığındaki hesap gerçekten uçuşa geçecektir. 8)

Kod: Tümünü seç

var 
  Saat, Dakika : Integer;
  Toplam : TDateTime;
begin
//Toplam uçuşun bulunması
  Toplam:=0;
  ADOTable1.First;
  while (Not ADOTable1.Eof) do
  begin
    Toplam := Toplam + ADOTable1.FieldByName('US').AsDateTime;
    ADOTable1.Next;
  end;
  Dakika := MinutesBetween( 0, Toplam );
  Saat   := Dakika div 60;
  Dakika := Dakika - (Saat * 60);
  ToplamUcus.Text := Format('%.2d:%.2d', [ Saat, Dakika ] );
end;
Hocam teşekkür ederim. Diğer arkadaşların da işine yarayabilecek bu kodun çalışması için Saat ve Dakika için integer tipinde bir değişken tanımlamak gerekiyor.
Kullanıcı avatarı
dogan
Üye
Mesajlar: 173
Kayıt: 17 Eki 2014 10:11

Re: Kümülatif saat toplamı

Mesaj gönderen dogan »

mrmarman yazdı:Öncelikler aşağıdaki bahsettiğim hesabı yapabilmek için DateUtils unitini USES satırına ekleyiniz. Umuyorum veritabanınızdaki US alanına sadece saat giriyor, tarih girmiyorsunuzdur. Çünkü en az bir tarih girerseniz MinutesBetween kullanılan 0 ile toplam aralığındaki hesap gerçekten uçuşa geçecektir. 8)

Merhaba,

İstemeden de olsa konuyu hortlattım, bir kaç gündür çözemediğim sıkıntı var, Kısacası hocam ben saniyeyi de hesaplatmak istiyorum ancak bir türlü işin içinden çıkamadım...

Kod: Tümünü seç

procedure TForm9.Button3Click(Sender: TObject);
var
  Saat, Dakika, Saniye: Integer;
  Toplam: TDateTime;
begin
  Toplam := 0;
  Query.First;
  while Not Query.Eof do
  begin
    Toplam := Toplam + Query.FieldByName('ZAMAN').AsDateTime;
    Query.Next;
  end;
  Dakika := MinutesBetween(0, Toplam);
  Saat := Dakika div 60;
  Dakika := Dakika - (Saat * 60);

  Saniye := Saniye - (Dakika * 60);

  Caption := Format('%.2d:%.2d:%.2d', [Saat, Dakika, Saniye]);
end;
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Kümülatif saat toplamı

Mesaj gönderen mrmarman »

Hesaplamaya total olarak daima en küçük zaman diliminden başlamalısın.
Kalanları sn, dk, sa şeklinde bırakarak bileşenlerine ayırmış olursun.

Burada dakika ile başlamışsın ondan takılmışsın. Saniyeden başlayacaksın.
Resim
Resim ....Resim
Kullanıcı avatarı
dogan
Üye
Mesajlar: 173
Kayıt: 17 Eki 2014 10:11

Re: Kümülatif saat toplamı

Mesaj gönderen dogan »

mrmarman yazdı:Hesaplamaya total olarak daima en küçük zaman diliminden başlamalısın.
Kalanları sn, dk, sa şeklinde bırakarak bileşenlerine ayırmış olursun.

Burada dakika ile başlamışsın ondan takılmışsın. Saniyeden başlayacaksın.

Hocam sanırım mantığı anlayamadım, rica etsem kod lu olarak anlatabilir misiniz.

Kod: Tümünü seç

  
  Saniye := MinutesBetween(0, Toplam);
  Saat := Dakika div 60;
  Dakika := Dakika - (Saat * 60);
  Saniye := Saniye - (Dakika * 60);
  Caption := Format('%.2d:%.2d:%.2d', [Saat, Dakika, Saniye]);
end;
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Kümülatif saat toplamı

Mesaj gönderen mrmarman »

Saat(ler) : HOUR(s)
Dakika(lar) : MINUTE(s)
Saniye(ler) : SECOND(s)
bu Türkçe / İngilizce ikililere bakarak

Kod: Tümünü seç

Saniye := MinutesBetween(0, Toplam);
ile ne yaptığını ifade edebilirsen devam edeceğim.. :D

Bana delphi kodu ile değil, saniye cinsinden örneğin 235020 saniye değerinin kaç saat kaç dakika kaç saniye olduğunu nasıl bulursun ? Matematik olarak yazarak başlayalım.
Resim
Resim ....Resim
Kullanıcı avatarı
dogan
Üye
Mesajlar: 173
Kayıt: 17 Eki 2014 10:11

Re: Kümülatif saat toplamı

Mesaj gönderen dogan »

mrmarman yazdı:Saat(ler) : HOUR(s)
Dakika(lar) : MINUTE(s)
Saniye(ler) : SECOND(s)
bu Türkçe / İngilizce ikililere bakarak

Kod: Tümünü seç

Saniye := MinutesBetween(0, Toplam);
ile ne yaptığını ifade edebilirsen devam edeceğim.. :D

Bana delphi kodu ile değil, saniye cinsinden örneğin 235020 saniye değerinin kaç saat kaç dakika kaç saniye olduğunu nasıl bulursun ? Matematik olarak yazarak başlayalım.

65:17:00

Kod: Tümünü seç

Saniye := MinutesBetween(0, Toplam);
en küçük birim...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Kümülatif saat toplamı

Mesaj gönderen mrmarman »

Şimdi biraz matematik.

1 saat 60 dakika
1 dakika 60 saniye olduğuna göre.

İlk yapacağın işlem toplam saniyeyi 60'a bölerek kaç dakika ettiğini bulmaktır.

Geriye kalıntı olan saniyedir. Tam bölümürse 00 saniye dersin kalanlı bölünürse kalanı kadar saniye dersin.

Şimdi buraya kadar yazdığıma göre kalan saniyeyi bulur musun.

Eklemeyi unuttum, delphi kodu ile..
Resim
Resim ....Resim
Kullanıcı avatarı
dogan
Üye
Mesajlar: 173
Kayıt: 17 Eki 2014 10:11

Re: Kümülatif saat toplamı

Mesaj gönderen dogan »

Bugün çok çılgınsınız hocam :lol:


Matematikte sorun yok, sorun bunu delphiye kodlama olarak uygulamada... :shock:
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Kümülatif saat toplamı

Mesaj gönderen mrmarman »

iyi ama hocam da MinutesBetween'e en küçük zaman dilimi diyerek mesajı bu hale kendiniz evirdiniz. :alsana:

istediğin hassasiyet Saniye ise nasıl oluyor da dakika en küçük zaman dilimi oluyor ? Bunun cevabını görmeni sağlamaya çalışıyorum.

Matematik bilgin hangi seviyede olursa olsun, aşağıdaki şu cevaplardan birini vermek o kadar zor mu ?

Kod: Tümünü seç

Var
  TopSaniye : Integer;
  Saniye    : Integer;
begin
  TopSaniye := 235020;
  Saniye    := TopSaniye - ( Trunc(TopSaniye / 60) * 60 );
  //  veya
  Saniye    := TopSaniye - ( TopSaniye div 60 * 60 );
  //  veya
  Saniye    := TopSaniye MOD 60;

end;
Resim
Resim ....Resim
Cevapla