Yorumları: 38
Konuları: 11
Kayıt Tarihi: 21-11-2016
Rep Puanı: 46 Başlangıç
01-06-2017, Saat: 09:00
(Son Düzenleme: 01-06-2017, Saat: 09:11, Düzenleyen: 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
Delphi Türkiye Forumuna da yazmıştım. Oradan Aldığım Cevap ve Yanıtım:
SimaWB Adlı Kullanıcıdan Alıntı: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.
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...
Bunların Işığında Önerilerinizi, Çözümlerinizi Bekliyorum. Teşekkürler. İyi Çalışmalar...
Yorumları: 1.571
Konuları: 88
Kayıt Tarihi: 09-08-2016
Rep Puanı: 13.829 Üstad
O zaman buradan devam edelim
Problemi tam olarak anlayamadım ?
There's no place like 127.0.0.1
Yorumları: 38
Konuları: 11
Kayıt Tarihi: 21-11-2016
Rep Puanı: 46 Başlangıç
(01-06-2017, Saat: 09:23)SimaWB Adlı Kullanıcıdan Alıntı: O zaman buradan devam edelim
Problemi tam olarak anlayamadım ?
Problemim şu tarih ve saat bilgisini içeren iki farkli TArray<Byte> tipinde dizi var. Tarih dizisini tarih olarak, saat dizisini de saat olarak çevirmek istiyorum.
örnek diziler :
bcdTicketDate: TArray<Byte> = (70,119,85,120)
bcdTicketTime : TArray<Byte> =(69,81,89,83)
Yorumları: 1.571
Konuları: 88
Kayıt Tarihi: 09-08-2016
Rep Puanı: 13.829 Üstad
var
tarih: TDate;
saat: TTime;
begin
Move( bcdTicketDate[0], tarih, SizeOf(tarih));
Move( bcdTicketTime[0], saat, SizeOf(saat));
Memo1.Lines.Add(FormatDateTime('dd/mm/yyyy', tarih));
Memo1.Lines.Add(FormatDateTime('hh:nn', saat));
end;
There's no place like 127.0.0.1
Yorumları: 38
Konuları: 11
Kayıt Tarihi: 21-11-2016
Rep Puanı: 46 Başlangıç
01-06-2017, Saat: 10:23
(Son Düzenleme: 01-06-2017, Saat: 10:25, Düzenleyen: TescilsizUzman.)
İlginiz için çok teşekkürler. Yardım Edenleriniz bol olsun...
Yaptığım denemeyi paylaşıyorum. İhtiyacı olanlar faydalanabilsinler...
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.
Yorumları: 38
Konuları: 11
Kayıt Tarihi: 21-11-2016
Rep Puanı: 46 Başlangıç
01-06-2017, Saat: 12:45
(Son Düzenleme: 01-06-2017, Saat: 13:52, Düzenleyen: TescilsizUzman.)
bcdTicketDate: TArray<Byte> = (70,119,85,120)
bcdTicketTime : TArray<Byte> =(69,81,89,83)
Yukarıdaki dizileri örnek uygulama ile çevirim yapmak istediğimde dizi değerleri tarih ya da saat olarak çözülemiyor. Delphi deki TDate,TTime,TDateTime tipleri 8 byte,fakat bu diziler 4 byte değer içeriyor. Bu dizilerin çevrimini nasıl yapabilirim?
Yorumları: 1.571
Konuları: 88
Kayıt Tarihi: 09-08-2016
Rep Puanı: 13.829 Üstad
01-06-2017, Saat: 13:01
(Son Düzenleme: 01-06-2017, Saat: 13:07, Düzenleyen: SimaWB.)
4 byte olduklarına göre bir şeyler eksik. Hangi kısım eksik bizim bilme şansımız yok. Bu verileri nasıl temin ettiğinize göre değişir. Bunları bulan sizseniz, geri dönüşüm yolunu da biliyor olmalısınız.
Not: Eksik demek yanlış olur. Farklı format/protokol kullanılmış diyelim. Bu format kurallarını bilmeden dönüşüm yapamayız. Mesela; TDateTime'in yıl kısmını 2 byte'a bölmüş, bunlarda sizin bcdTicketDate'in ilk 2 byte'ı olabilir. Bunu gibi farklı yöntemle bu 4 byte elde edilmişse, nasıl elde edildiğini bilmek zorundayız.
There's no place like 127.0.0.1
Yorumları: 38
Konuları: 11
Kayıt Tarihi: 21-11-2016
Rep Puanı: 46 Başlangıç
Bu cevaplar eft-pos tan gelen bilgiler. Eft-posun satış sonunda doldurduğu satış bilgileri içindeki tarih - saat değerleri.
Yorumları: 1.571
Konuları: 88
Kayıt Tarihi: 09-08-2016
Rep Puanı: 13.829 Üstad
Eklediğim not kısmına bakınız.
There's no place like 127.0.0.1
Yorumları: 38
Konuları: 11
Kayıt Tarihi: 21-11-2016
Rep Puanı: 46 Başlangıç
01-06-2017, Saat: 13:57
(Son Düzenleme: 01-06-2017, Saat: 14:16, Düzenleyen: erkankurtaga.)
Alıntı:Yazan SimaWB - 50 dakika önce
4 byte olduklarına göre bir şeyler eksik. Hangi kısım eksik bizim bilme şansımız yok. Bu verileri nasıl temin ettiğinize göre değişir. Bunları bulan sizseniz, geri dönüşüm yolunu da biliyor olmalısınız.
Not: Eksik demek yanlış olur. Farklı format/protokol kullanılmış diyelim. Bu format kurallarını bilmeden dönüşüm yapamayız. Mesela; TDateTime'in yıl kısmını 2 byte'a bölmüş, bunlarda sizin bcdTicketDate'in ilk 2 byte'ı olabilir. Bunu gibi farklı yöntemle bu 4 byte elde edilmişse, nasıl elde edildiğini bilmek zorundayız.
Demek istediğinizi anladım. Araştırıyorum.
(01-06-2017, Saat: 13:57)erkankurtaga Adlı Kullanıcıdan Alıntı: Alıntı:Yazan SimaWB - 50 dakika önce
4 byte olduklarına göre bir şeyler eksik. Hangi kısım eksik bizim bilme şansımız yok. Bu verileri nasıl temin ettiğinize göre değişir. Bunları bulan sizseniz, geri dönüşüm yolunu da biliyor olmalısınız.
Not: Eksik demek yanlış olur. Farklı format/protokol kullanılmış diyelim. Bu format kurallarını bilmeden dönüşüm yapamayız. Mesela; TDateTime'in yıl kısmını 2 byte'a bölmüş, bunlarda sizin bcdTicketDate'in ilk 2 byte'ı olabilir. Bunu gibi farklı yöntemle bu 4 byte elde edilmişse, nasıl elde edildiğini bilmek zorundayız.
Demek istediğinizi anladım. Araştırıyorum.
Konuyu araştırdım. Dediğiniz gibi ;
bcdTicketDate: TArray<Byte> = (70,119,85,120) => YYMMDD
bcdTicketTime : TArray<Byte> =(69,81,89,83) => HHMMSS
|