DateTime To ByteArray / ByteArray to DateTime

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
erkankurtaga
Üye
Mesajlar: 62
Kayıt: 04 Oca 2009 06:36

DateTime To ByteArray / ByteArray to DateTime

Mesaj gönderen erkankurtaga »

Çok araştırdım Bulamadım. Tarih ve Saat değerlerini byte array ve byte arrayden Tarih ve Saat değerlerinin çevrimi ile alakalı bilgi verebilecek örnek gösterebilecek var mı? Teşekkürler
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: DateTime To ByteArray / ByteArray to DateTime

Mesaj gönderen SimaWB »

TDateTime aslında Double tipinde bir veridir. Yani 8 byte'lık bir sayıdır.
Dolayısıyla 8 byte'lık bir byte array'a kopyalabilirsiniz.

Kod: Tümünü seç

var
  dt: TDateTime;
  buf: array[0..7] of Byte;
begin
  dt := Now;
  Move(dt, buf[0], SizeOf(dt));
Daha sonra buf'ı TDateTime(buf) şeklinde dönüşüm yapıp kullanabilirsiniz.

Muhtemelen başka yöntemleri de vardır ama benim ilk aklıma bu geldi.
There's no place like 127.0.0.1
erkankurtaga
Üye
Mesajlar: 62
Kayıt: 04 Oca 2009 06:36

Re: DateTime To ByteArray / ByteArray to DateTime

Mesaj gönderen erkankurtaga »

SimaWB yazdı:TDateTime aslında Double tipinde bir veridir. Yani 8 byte'lık bir sayıdır.
Dolayısıyla 8 byte'lık bir byte array'a kopyalabilirsiniz.

Kod: Tümünü seç

var
  dt: TDateTime;
  buf: array[0..7] of Byte;
begin
  dt := Now;
  Move(dt, buf[0], SizeOf(dt));
Daha sonra buf'ı TDateTime(buf) şeklinde dönüşüm yapıp kullanabilirsiniz.

Muhtemelen başka yöntemleri de vardır ama benim ilk aklıma bu geldi.
Yönteminizi denedim. ByteArray e geçişte sıkıntı yok. Yalnız ByteArray den çevirim yapamadım. Çevrim yapmak istediğim ByteArray de TArray(Byte) tipinde...
erkankurtaga
Üye
Mesajlar: 62
Kayıt: 04 Oca 2009 06:36

Re: DateTime To ByteArray / ByteArray to DateTime

Mesaj gönderen erkankurtaga »

Problemim
SimaWB
yardımıyla çözüldü. Teşekkürler.

Yaptığım denemeyi paylaşıyorum. İhtiyacı olanlar faydalanabilirler...

Kod: Tümünü seç

unit Unit2;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TByteArr = TArray<Byte>;

  TForm2 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Button2: TButton;
    Memo2: TMemo;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);

  private
    dt:TDateTime;
    d:TDate;
    t:TTime;

    fdtArr:TByteArr;
    fdArr:TByteArr;
    ftArr:TByteArr;
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
var i:Integer; s:string;
begin
  Memo1.Lines.Clear;

  dt := Now;
  d  := StrToDate(DateToStr(dt));
  t  := StrToTime(TimeToStr(dt));

  Label1.Caption := DateTimeToStr(dt);

  SetLength(fdtArr,SizeOf(dt));
  SetLength(fdArr,SizeOf(d));
  SetLength(ftArr,SizeOf(t));

  Move(dt,fdtArr[0],SizeOf(dt));
  Move(d ,fdArr[0] ,SizeOf(d));
  Move(t ,ftArr[0] ,SizeOf(t));

  s:='';
  for I := Low(fdtArr) to High(fdtArr) do
  s := s + ','+IntToStr(fdtArr[i]);

  Delete(s,1,1);
  Memo1.Lines.Add('fdtArr=('+s+')');

  s:='';
  for I := Low(fdArr) to High(fdArr) do
  s := s + ','+IntToStr(fdArr[i]);

  Delete(s,1,1);
  Memo1.Lines.Add('fdArr=('+s+')');


  s:='';
  for I := Low(ftArr) to High(ftArr) do
  s := s + ','+IntToStr(ftArr[i]);

  Delete(s,1,1);
  Memo1.Lines.Add('ftArr=('+s+')');
end;

procedure TForm2.Button2Click(Sender: TObject);
var i:Integer;
begin
  Memo2.Lines.Clear;

  Move(fdtArr[0],dt,SizeOf(dt));
  Move(fdArr[0] ,d ,SizeOf(d));
  Move(ftArr[0] ,t ,SizeOf(t));

  Memo2.Lines.Add(DateTimeToStr(dt));
  Memo2.Lines.Add(DateToStr(d));
  Memo2.Lines.Add(TimeToStr(t));
end;

end.
Cevapla