int to time

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

sadettinpolat yazdı: 0,25 te ise virgülden sonraki 5 basamak dikkate alınıyor.

25000 / 60 = 416,6 dakika
416 / 60 = 6,9 saat
sizinkine göre yapınca 0,75 saat 18:00 olarak çıkmıyor. Ayrıca delphi helpte
0,25 tam olarak 6:00 yı temsil ediyor. Bence başka bir mantığı olmalı.

Belki de salisenin 60 olarak değil de 100 olmasının bir etkisi vardır.


İyi çalışmalar.
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,
Delphi yazdı: The integral part of a Delphi TDateTime value is the number of days that have passed since 12/30/1899. The fractional part of the TDateTime value is fraction of a 24 hour day that has elapsed.
İngilizce tam bilmediğimden yanlış olabilirim. Yukarıdakine göre tdatetime ın günün 24 saatinin bölümlerinden oluştuğu gibi bir tarif var.

Sizdeki rakamı 0,63981

Kod: Tümünü seç

S := FormatDateTime('hh:mm:ss:zzz', strtofloat(edit1.text));
  label2.Caption:= s;
ile 15:21:19:584 buldum.

Şimdi bunu yukarıdakine göre elle bulalım.

Kod: Tümünü seç

24*0,63981      =    15,35544        tamsayı saati verdi.            15
0,35544*60      =    21,3264         tamsayı dakikayı verdi.        21
0,3264*60        =    19,584           tamsayı saniyeyi verdi.        19
0,584*1000      =   584                 tamsayı saliseyi verdi.       598
şimdi sağ taraftaki rakamlara yukarıdan aşağıya bakarsak verilen saat ile aynı olduğu görülür.

Şimdi sizin ticari programa gelelim. Onlar da Sadettin Bey'in verdiği linkteki gibi. Saniye cinsinden verilen bir rakamı saate çeviriyor. Ama bu sakıncalı durumlar yaratabilir.
Mesela Sadettin Beyin verdiği koda 99 999 şeklinde bir rakam girerseniz ,27:46:39 değeri 999 999 verilirse 277:46:39 değeri döner.

Ama delphidekine göre yaparsanız. 99 999 23:59:59:136 sonucu,
999 999 girince 23:59:59:914 sonucu çıkıyor.

Yani sizinkiler standarta uymadan saniye ye göre işlem yapan bir fonksiyonla işi yapmışlar.
Bu durumda Sadettin Bey'in yolunu takip etmeniz gerekir.

Kolay gelsin.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

ofenX yazdı:Merhaba,
Delphi yazdı: The integral part of a Delphi TDateTime value is the number of days that have passed since 12/30/1899. The fractional part of the TDateTime value is fraction of a 24 hour day that has elapsed.
İngilizce tam bilmediğimden yanlış olabilirim. Yukarıdakine göre tdatetime ın günün 24 saatinin bölümlerinden oluştuğu gibi bir tarif var.
Diyor ki değerin tamsayı kısmı 30.12.1899'dan beri geçen toplam gün sayısını tutar. Kesirli ondalık kısmı ise günün 24 saatini tutar.
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

Merhaba @coderlord, @ofenX, @sadettinpolat ;

Yardımlarınız için çok teşekkür ederim hem mantık hemde işlevsellik olarak sorunu sayenizde çözdüm.
sadettinpolat yazdı: Function

Kod: Tümünü seç

function TimeToText(T: Integer): string;
var
  H, M, S: string;
  ZH, ZM, ZS: Integer;
begin
  ZH := T div 3600;
  ZM := T div 60 - ZH * 60;
  ZS := T - (ZH * 3600 + ZM * 60);
  if ZH <10 then H := '0' + IntToStr(ZH)
  else
    H := IntToStr(ZH);
  if ZM <10 then M := '0' + IntToStr(ZM)
  else
    M := IntToStr(ZM);
  if ZS <10 then S := '0' + IntToStr(ZS)
  else
    S := IntToStr(ZS);
  Result := H + ':' + M + ':' + S;
end;
Kullanımı

Kod: Tümünü seç

Caption :=TimeToText(63981); //caption = 17:46:21
Değerli yardımlarınız için ayrı ayrı teşekkür ederim.

Saygılarımla
Teşekkürler.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

Merhaba;
Şimdi bu işlemin tam tersi için yani time to int ile işlem yapmaya çalıştım @sadettin polat hocam senin vermiş olduğun linkteki bir function şöyle diyor.

Kod: Tümünü seç

function TextToTime(S: string): Integer;
var
  p, i: Integer;
  Sh, Sm, Ss: string;
begin
  Sh := '';
  SM := '';
  SS := '';
  i  := 1;
  p  := 0;
  while i do
  begin
    if (s[i] <> ':') then
    begin
      case P of
        0: SH := Sh + s[i];
        1: SM := SM + S[i];
        2: SS := SS + S[i];
      end;
    end
    else
      Inc(p);
    Inc(i);
  end;
  try
    Result := (StrToInt(SH) * 3600) + (StrToInt(SM) * 60) + (StrToInt(SS))
    except
      Result := 0;
  end;
end;

Kod: Tümünü seç

[Error] Unit1.pas(49): Type of expression must be BOOLEAN
Döngü başlangıcında hata veriyor ama anlam veremedim çünkü (i) değeri zaten integer tanımlanmış ve döngüde sorun gözükmüyor.
While do bloğunda bu hatayı veriyor.

Teşekkür ederim.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Kod: Tümünü seç

while (i <> Length(s)) do
olması gerekmez mi?
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

Merhaba @coderlord hocam;

Değerli cevabın için teşekkür ederim ben görememişim. :oops:
Sonuç olarak hocam

text to time
Function

Kod: Tümünü seç

function TextToTime(S: string): Integer;
var
  p, i: Integer;
  Sh, Sm, Ss: string;
begin
  Sh := '';
  SM := '';
  SS := '';
  i  := 1;
  p  := 0;
  while (i <> Length(s)) do
  begin
    if (s[i] <> ':') then
    begin
      case P of
        0: SH := Sh + s[i];
        1: SM := SM + S[i];
        2: SS := SS + S[i];
      end;
    end
    else
      Inc(p);
    Inc(i);
  end;
  try
    Result := (StrToInt(SH) * 3600) + (StrToInt(SM) * 60) + (StrToInt(SS))
    except
      Result := 0;
  end;
end;
Kullanımı

Kod: Tümünü seç

edit3.text:=IntToStr(TextToTime(edit4.text));

Not: Bu çevrim işleminde yani int to time - time to int çevrim işleminde 48 sn far oluyor :D
Örn;
35693 :=09:54:53

09:54:53:=35645


35645:=09:54:05

09:54:53 - 09:54:05 =48
Fark 48 sn

Saygılarımla
Teşekkür ederim
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,
pro_imaj yazdı: Not: Bu çevrim işleminde yani int to time - time to int çevrim işleminde 48 sn far oluyor :D

Kod: Tümünü seç

 while (i <> Length(s)) do 
yerine

Kod: Tümünü seç

 while (i <= Length(s)) do 
showmessage ile yazdırınca ss yi sadece 5 yazdırıyordu. O yüzden döngüden çıktığı anlaşılıyordu.

Kolay gelsin.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Doğru. Son karakteri hesaba katmadık. :)
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

ofenX yazdı:

Kod: Tümünü seç

 while (i <= Length(s)) do 
@ofenX Teşekkür ederim hocam.

Ya bu showmessage ile sorunların üstüne gitmek gerçekten çok iyi bir fikir.

Teşekkürler.
Çalışmalarınızda başarılar.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Cevapla