10. Tarih ve Saat İşlemleri (TDateTime Kullanımı)

Delphi Logo
Delphi Logo
image text

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.
Pascal

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.
Pascal

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.

Pascal

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.

Pascal

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.

Pascal

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ı):

Pascal

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.

İlk yorum yapan olun

Bir yanıt bırakın

E-posta hesabınız yayımlanmayacak.


*