Kümülatif saat toplamı
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 11
- Kayıt: 01 Oca 2009 04:59
Kümülatif saat toplamı
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,
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,
Re: Kümülatif saat toplamı
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..'
'Yükseldikçe küçülen bir uçurtma..'
Re: Kümülatif saat toplamı
Ö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.

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;
-
- Üye
- Mesajlar: 11
- Kayıt: 01 Oca 2009 04:59
Re: Kümülatif saat toplamı
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.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.![]()
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;
Re: Kümülatif saat toplamı
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.![]()
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;
Re: Kümülatif saat toplamı
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.
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.
Re: Kümülatif saat toplamı
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;
Re: Kümülatif saat toplamı
Saat(ler) : HOUR(s)
Dakika(lar) : MINUTE(s)
Saniye(ler) : SECOND(s)
bu Türkçe / İngilizce ikililere bakarak ile ne yaptığını ifade edebilirsen devam edeceğim.. 
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.
Dakika(lar) : MINUTE(s)
Saniye(ler) : SECOND(s)
bu Türkçe / İngilizce ikililere bakarak
Kod: Tümünü seç
Saniye := MinutesBetween(0, Toplam);

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.
Re: Kümülatif saat toplamı
mrmarman yazdı:Saat(ler) : HOUR(s)
Dakika(lar) : MINUTE(s)
Saniye(ler) : SECOND(s)
bu Türkçe / İngilizce ikililere bakarakile ne yaptığını ifade edebilirsen devam edeceğim..Kod: Tümünü seç
Saniye := MinutesBetween(0, Toplam);
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);
Re: Kümülatif saat toplamı
Ş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..
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..
Re: Kümülatif saat toplamı
Bugün çok çılgınsınız hocam
Matematikte sorun yok, sorun bunu delphiye kodlama olarak uygulamada...

Matematikte sorun yok, sorun bunu delphiye kodlama olarak uygulamada...

Re: Kümülatif saat toplamı
iyi ama hocam da MinutesBetween'e en küçük zaman dilimi diyerek mesajı bu hale kendiniz evirdiniz.
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 ?

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;