

10. Tarih ve Saat İşlemleri (TDateTime Kullanımı)
Delphi programlama dilinde tarih ve saat işlemleri, finansal uygulamalardan, log kayıtlarına, randevu sistemlerinden, oyun geliştirmeye kadar birçok alanda kritik bir rol oynar. Delphi, tarih ve saat bilgilerini saklamak ve işlemek için TDateTime veri tipini sunar. Bu makalede, TDateTime’ın ne olduğunu, nasıl kullanıldığını ve Delphi’de tarih ve saatlerle nasıl etkili bir şekilde çalışabileceğinizi ayrıntılı olarak inceleyeceğiz.
TDateTime Veri Tipi Nedir?
TDateTime, Delphi’de tarih ve saat bilgilerini temsil etmek için kullanılan bir kayan noktalı sayı veri tipidir (Double). Tamsayı kısmı tarihi, ondalık kısmı ise günü temsil eder. Bu yapı, tarih ve saat bilgilerini tek bir değişken içinde saklamayı ve bu bilgiler üzerinde matematiksel işlemler yapmayı kolaylaştırır.
TDateTime, 30 Aralık 1899 saat 12:00’ı sıfır (0) olarak kabul eder. Bu tarihten sonraki her gün için tamsayı kısmı 1 artar. Örneğin, 31 Aralık 1899 saat 12:00, 1.0 değerine karşılık gelir. Saati temsil eden ondalık kısım ise, günün kesirsel bir parçasını ifade eder. Örneğin, öğlen 12:00 0.5 değerine, akşam 18:00 ise 0.75 değerine karşılık gelir.
TDateTime ile Çalışmak
TDateTime Değerleri Oluşturma
Delphi’de TDateTime değerleri oluşturmanın birkaç yolu vardır:
- Date ve Time Fonksiyonlarını Kullanmak: Date fonksiyonu geçerli tarihi, Time fonksiyonu ise geçerli saati TDateTime türünde döndürür.
- EncodeDate ve EncodeTime Fonksiyonlarını Kullanmak: Bu fonksiyonlar, sırasıyla yıl, ay, gün ve saat, dakika, saniye bilgilerini alarak bir TDateTime değeri oluşturur.
- StrToDateTime Fonksiyonunu Kullanmak: Bir string ifadeyi TDateTime türüne dönüştürmek için kullanılır.
var
TarihSaat: TDateTime;
begin
// Geçerli tarihi alır
TarihSaat := Date;
// Geçerli saati alır
TarihSaat := Time;
// Belirli bir tarih ve saat oluşturur
TarihSaat := EncodeDate(2024, 10, 27) + EncodeTime(14, 30, 0);
// String'den TDateTime'a dönüştürme
TarihSaat := StrToDateTime('27.10.2024 14:30:00');
end;
TDateTime Değerlerini Ayrıştırma
Bir TDateTime değerinden tarih ve saat bilgilerini ayrı ayrı elde etmek için aşağıdaki fonksiyonlar kullanılabilir:
- DecodeDate: Bir TDateTime değerinden yıl, ay ve gün bilgilerini ayrıştırır.
- DecodeTime: Bir TDateTime değerinden saat, dakika, saniye ve milisaniye bilgilerini ayrıştırır.
- YearOf, MonthOf, DayOf, HourOf, MinuteOf, SecondOf, MilliSecondOf: Bu fonksiyonlar da bir TDateTime değerinden ilgili bileşenleri ayrıştırmak için kullanılabilir.
var
TarihSaat: TDateTime;
Yil, Ay, Gun, Saat, Dakika, Saniye, Milisaniye: Word;
begin
TarihSaat := Now; // Şu anki tarih ve saati alır
// DecodeDate ile tarih bileşenlerini ayrıştırma
DecodeDate(TarihSaat, Yil, Ay, Gun);
// DecodeTime ile saat bileşenlerini ayrıştırma
DecodeTime(TarihSaat, Saat, Dakika, Saniye, Milisaniye);
// YearOf, MonthOf, DayOf fonksiyonlarını kullanma
Yil := YearOf(TarihSaat);
Ay := MonthOf(TarihSaat);
Gun := DayOf(TarihSaat);
end;
TDateTime ile Aritmetik İşlemler
TDateTime, tarih ve saatler üzerinde aritmetik işlemler yapmayı kolaylaştırır. Örneğin, iki tarih arasındaki farkı hesaplayabilir, bir tarihe gün ekleyebilir veya çıkarabilirsiniz.
var
Tarih1, Tarih2: TDateTime;
Fark: Double;
begin
Tarih1 := EncodeDate(2024, 10, 27);
Tarih2 := EncodeDate(2024, 10, 30);
// İki tarih arasındaki farkı gün cinsinden hesaplar
Fark := Tarih2 - Tarih1;
// Bir tarihe gün ekleme
Tarih1 := Tarih1 + 7; // Tarih1'e 7 gün ekler
end;
Tarih ve Saat Biçimlendirme
TDateTime değerlerini kullanıcıya daha anlaşılır bir şekilde sunmak için biçimlendirme önemlidir. Delphi, tarih ve saatleri biçimlendirmek için FormatDateTime fonksiyonunu sunar. Bu fonksiyon, bir TDateTime değeri ve bir biçim stringi alır ve biçimlendirilmiş bir string döndürür.
var
TarihSaat: TDateTime;
BicimlendirilmisTarih: string;
begin
TarihSaat := Now;
// Tarihi belirli bir formatta biçimlendirme
BicimlendirilmisTarih := FormatDateTime('dd.mm.yyyy hh:nn:ss', TarihSaat);
// Farklı bir formatta biçimlendirme
BicimlendirilmisTarih := FormatDateTime('yyyy-mm-dd', TarihSaat);
end;
FormatDateTime fonksiyonunda kullanılabilecek bazı yaygın biçim belirteçleri şunlardır:
dd
: Gün (01-31)mm
: Ay (01-12)yyyy
: Yıl (dört haneli)yy
: Yıl (iki haneli)hh
: Saat (00-23)nn
: Dakika (00-59)ss
: Saniye (00-59)zzz
: Milisaniye (000-999)ddd
: Haftanın günü (kısaltılmış)dddd
: Haftanın günü (tam)mmm
: Ay (kısaltılmış)mmmm
: Ay (tam)
Örnek Uygulama: Kronometre
Aşağıdaki örnek, Delphi’de basit bir kronometre uygulamasının nasıl oluşturulabileceğini göstermektedir. Bu uygulama, Timer bileşenini ve TDateTime’ı kullanarak geçen süreyi hesaplar.
Bu örneği çalıştırmak için öncelikle Delphi’de yeni bir VCL Forms Application oluşturun. Form üzerine bir adet TButton, bir adet TLabel ve bir adet TTimer bileşeni ekleyin. Timer bileşeninin Enabled özelliğini False olarak ayarlayın.
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Timer1: TTimer;
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
StartTime: TDateTime;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if Timer1.Enabled then
begin
Timer1.Enabled := False;
Button1.Caption := 'Başlat';
end
else
begin
StartTime := Now;
Timer1.Enabled := True;
Button1.Caption := 'Durdur';
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
ElapsedTime: TDateTime;
begin
ElapsedTime := Now - StartTime;
Label1.Caption := FormatDateTime('nn:ss:zzz', ElapsedTime);
end;
end.
Formun .dfm
dosyası (isteğe bağlı):
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Kronometre'
ClientHeight = 150
ClientWidth = 300
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Button1: TButton
Left = 112
Top = 24
Width = 75
Height = 25
Caption = 'Başlat'
TabOrder = 0
OnClick = Button1Click
end
object Label1: TLabel
Left = 120
Top = 72
Width = 58
Height = 13
Caption = '00:00:000'
TabOrder = 1
end
object Timer1: TTimer
Interval = 1
OnTimer = Timer1Timer
end
end
Bu örnekte, Timer bileşeninin Interval özelliği 1 milisaniyeye ayarlanmıştır. Bu, Timer’ın her milisaniyede bir Timer1Timer olayını tetiklemesini sağlar. Timer1Timer olayında, geçen süre hesaplanır ve Label1 bileşeninde görüntülenir.
Sonuç
Delphi’de TDateTime veri tipi, tarih ve saatlerle çalışmayı son derece kolaylaştırır. Bu makalede, TDateTime’ın ne olduğunu, nasıl kullanıldığını ve tarih/saat bilgilerini nasıl biçimlendirebileceğinizi öğrendiniz. Ayrıca, basit bir kronometre uygulaması örneğiyle TDateTime’ın pratik kullanımını gördünüz. Bu bilgilerle, Delphi projelerinizde tarih ve saat işlemlerini etkili bir şekilde yönetebilirsiniz.
Bir yanıt bırakın