Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
İki saat arasındaki fark
#1
String değer olarak girilen giriş ve çıkış saatlerinin arasındaki saat farkını, yani kaç saat çalıştığını nasıl bulabilirim?   
17:36 - 08:00  arasındaki farkı 09:36 olarak döndürecek.
Cevapla
#2
(12-01-2019, Saat: 16:16)ssmr Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.String değer olarak girilen giriş ve çıkış saatlerinin arasındaki saat farkını, yani kaç saat çalıştığını nasıl bulabilirim?   
17:36 - 08:00  arasındaki farkı 09:36 olarak döndürecek.

Merhabalar

Forum içinde arama : Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.

Deneme fırsatım olmadığı için Üzgünüm. 

Function FullTimeToStr(StartDT,EndDT:TDateTime):STRING;
 VAR
   sTemp            : STRING;
   Days,Hours,iTemp : INTEGER;
   TimeStart,TimeEnd: TTime;
 BEGIN
   TimeStart:= StartDT;
   TimeEnd  := EndDT;
   IF TimeStart<0 THEN TimeStart:=TimeStart*-1; 
   IF TimeEnd<0 THEN TimeEnd:=TimeEnd*-1; 
   sTemp    := TimeToStr(TimeStart-TimeEnd);
   iTemp    := StrToInt(Copy(sTemp,1,2));
   Days     := INT(EndDT)-INT(StartDT);
   IF Days <0 Then Days := Days *-1; 
   Hours:=Days*24+iTemp;
   Result:=IntToStr(Hours)+COPY(sTemp,3,5);
 END;
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla
#3
Days := INT(EndDT)-INT(StartDT); bu satırda aşağıdaki hatayı alıyorum.
E2010 Incompatible types: 'Integer' and 'Extended'
Cevapla
#4
Wink 
Cevap belki de o kadar karmaşık değildir Smile , sanki şu da işinizi görür gibi.
ShowMessage(TimeTostr(TTime(StrToTime( '17:36')-StrToTime('08:00'))));
Herhangi bir basit problem, hakkında yeterince toplantı yapılarak, çözümsüz hale getirilebilir.

Cevapla
#5
(12-01-2019, Saat: 21:06)savasabd Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Cevap belki de o kadar karmaşık değildir Smile , sanki şu da işinizi görür gibi.
ShowMessage(TimeTostr(TTime(StrToTime( '17:36')-StrToTime('08:00'))));

Haklısınız. Kesinlikle basit düşünmek gerekiyormuş. Bilgi az olunca çok basit şeyleri karmaşık çözümler ile çözmeye çalışıyorum.Mesajınızdan önce bu basitliği farkettim lakin giriş saati çıkış saatinden büyük durumlarda işler karışıyor. Şu şekilde hallettim gibi. Kod karmaşası için özür dilerim.

var giris,cikis,z,topsaat:string;
begin
giris:=txt_giris.text;
cikis:=txt_cikis.text;
if strtotime(cikis)<strtotime(giris)  then
  begin
  z:='23:59';//datetime 24:00 olamayacağı için
  //Çıkış saati giriş saatinden küçük ise(giriş:23:00, çıkış:08:00 gibi
  //giriş saatini 23:59 dan çıkartıp incminute ile 1 dakika ekleyerek
  //giris saatine gece 00:00 a kadar kaç saat çalıştığını atıyor.
  giris :=timetostr(incminute(strtotime(z)-strtotime(giris),+1));
  //şimdi de saat 00:00 dan kaça kadar çalıştığını bulmak için çıkış saatinden
  //00:00 ı çıkartıp cikis değişkenine atıyoruz
  z:='00:00';
  cikis :=timetostr(strtotime(cikis)-strtotime(z));
  //giris ve cikis değişkenlerini toplatıp topsaat değişkenine atıyoruz
  topsaat:=timetostr(strtotime(cikis)+strtotime(giris));
  //fark değişkenini de formatdatetime ile text imize yazdırıyoruz.
  txt_saattoplami.Text:=formatdatetime('hh:mm',strtotime(topsaat));
  end
  else
  //eğer çıkış saati giriş saatinden büyükse aşağıdaki kod saat farkını veriyor
  txt_saattoplami.Text:=formatdatetime('hh:mm',strtotime(cikis)-strtotime(giris));
end;
Cevapla
#6
ShowMessage(TimeTostr(TTime(StrToDateTime( '12.01.2019 08:00:00')-StrToDateTime('11.01.2019 23:00:00'))));
Tarihi de işin içine katabilirsiniz, yukardaki kod da aynı işi yapar, üstelik büyük küçük gibi dertleriniz de olmaz.
Herhangi bir basit problem, hakkında yeterince toplantı yapılarak, çözümsüz hale getirilebilir.

Cevapla
#7
Evet ama tarih olmadan, saatlerin 23:00 gibi string olarak girildiği textboxlardan alındığını düşünürsek sizin kodunuz doğru sonucu vermez (diye düşünüyorum). Ben hiç tarih olmadan bu sorunu nasıl çözerim diye düşünmüştüm. Başardım da galiba. Biz amatörler size göre basit şeyleri aşınca acayip mutlu oluyoruz vallahi. Saygılar.
Cevapla
#8
Estağfurullah, maksat size yardım etmek, değilse benim tavsiyede bulunmam aramızdaki seviye farkından değil, belki o konuda daha önceden tecrübe etmiş olmamdandır.Sizin tecrübe ettiğiniz bir şeyden de ben yararlanırım.Bu arada aşağıdaki kod  tarihi kolayca almak konusunda fikir verebilir.
ShowMessage(TimeTostr(TTime(StrToDateTime( DateTostr(TDate(now)+1)+'08:00:00')-StrToDateTime(DateTostr(TDate(now))+'23:00:00'))));
Herhangi bir basit problem, hakkında yeterince toplantı yapılarak, çözümsüz hale getirilebilir.

Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Nesneler arasındaki ilşkiyi/bağlantıyı tespit etmek 41linea41 2 170 14-09-2019, Saat: 13:09
Son Yorum: 41linea41
  ÇÖZÜLDÜ-timer kullanmadan saat kontrolü mümkünmü? sadikacar60 3 210 10-09-2019, Saat: 22:19
Son Yorum: sadettinpolat
  ÇÖZÜLDÜ - Veritabanındaki saat alanını düzenleme wiseman 10 446 24-07-2019, Saat: 21:41
Son Yorum: mcuyan
  [ÇÖZÜLDÜ]Tarih ve Saat aralığı sorgulama wiseman 39 2.118 23-04-2019, Saat: 17:17
Son Yorum: wiseman
  Saat seconds ahmetb 2 341 17-02-2019, Saat: 12:33
Son Yorum: ahmetb



Konuyu Okuyanlar: 1 Ziyaretçi