Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
internetten tarihi nasıl alabilirirm
#11
Şöyle bir çözüm önerebilirim. 

* GET ile direkt içerik değil de çağrı durumunu alarak, 200 yani Success ise dönen değeri, aksi durumda projenin çalıştığı sistem tarihini döndürecek şekilde revize edildi...

* LContent.Size 19 ile sınırlı bakılacak çünkü yanlış adres yazıldığında da hata dönmeyip html sonuç alırsa bu ihtimal de değerlendirmeye katıldı. 


function GuncelTarih: String;
Const
  LTimeUrl = 'https://www.armanlab.com/time/time.php';
var
  LClient   : System.Net.HttpClientComponent.TNetHTTPClient;
  LContent  : TStringStream;
  LStatus   : Integer;
begin
  LClient   := TNetHTTPClient.Create(nil);
  LContent  := TStringStream.Create('');
  try
    LStatus := LClient.Get( LTimeUrl, LContent ).StatusCode;
    if ( LStatus = 200 ) AND ( LContent.Size = 19 )
                          then Result := LContent.DataString
                          else Result := FormatDateTime('DD.MM.YYYY HH:nn:ss', now());
  finally
    FreeAndNil(LClient);
    FreeAndNil(LContent);
  end;
end;


Kullanımı :
procedure TForm1.Button1Click(Sender: TObject);
begin
  Showmessage( GuncelTarih );
end;
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#12
(25-10-2021, Saat: 19:18)mrmarman Adlı Kullanıcıdan Alıntı: Şöyle bir çözüm önerebilirim. 

* GET ile direkt içerik değil de çağrı durumunu alarak, 200 yani Success ise dönen değeri, aksi durumda projenin çalıştığı sistem tarihini döndürecek şekilde revize edildi...

* LContent.Size 19 ile sınırlı bakılacak çünkü yanlış adres yazıldığında da hata dönmeyip html sonuç alırsa bu ihtimal de değerlendirmeye katıldı. 


function GuncelTarih: String;
Const
  LTimeUrl = 'https://www.armanlab.com/time/time.php';
var
  LClient   : System.Net.HttpClientComponent.TNetHTTPClient;
  LContent  : TStringStream;
  LStatus   : Integer;
begin
  LClient   := TNetHTTPClient.Create(nil);
  LContent  := TStringStream.Create('');
  try
    LStatus := LClient.Get( LTimeUrl, LContent ).StatusCode;
    if ( LStatus = 200 ) AND ( LContent.Size = 19 )
                          then Result := LContent.DataString
                          else Result := FormatDateTime('DD.MM.YYYY HH:nn:ss', now());
  finally
    FreeAndNil(LClient);
    FreeAndNil(LContent);
  end;
end;


Kullanımı :
procedure TForm1.Button1Click(Sender: TObject);
begin
  Showmessage( GuncelTarih );
end;
şimdi daha güzel oldu.tşkler..

peki hocam olduki kullanıcının bilgisayarın bölgesel ayarları değiştirdiğinde sıkıntı..
ben program son kullanım tarihini hosta text olarak keydediyorum
ben türkçe olarak kaydediyorum ancak müşterinin bölgesel ayarları ingilizce olunce çakışıyor...
türkçe(gün ay yıl )
ingilizce(ay gün yıl)
tabi birde speratorler

aynı şekilde müşteride kayt tarihini giriyor (ingilize).. bu sefer benim burda çalkışıyor...

kısacası formatları tanıyan ve çevirebilen bir koda ihtiyacım var


bunu nasıl aşabilirim
Cevapla
#13
Projenizin girişinde aşağıdaki şekilde ( projenizin çalışma uzayında geçerli olmak üzere ) kullanılacak formatı belirleyebilirsiniz.

Kendi projelerimde şöyle bir procedure tanımlayıp ilk defasında çalıştırıyorum.

procedure SystemDateTimeStandart;
Var
// Tarih/Saat Formatları Sistemden Bağımsız Düzeltmek için
{$IF CompilerVersion >= 23}
  FormatSettings: System.SysUtils.TFormatSettings;
{$ELSE}
  FormatSettings: TFormatSettings;
{$IFEND}
begin
  Application.UpdateFormatSettings := False;
{$IF CompilerVersion >= 23}
  FormatSettings := TFormatSettings.Create(LOCALE_SYSTEM_DEFAULT);
{$ELSE}
  GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, FormatSettings);
{$IFEND}
  FormatSettings.ThousandSeparator := ',';
  FormatSettings.DecimalSeparator  := '.';
  FormatSettings.DateSeparator := '.';
  FormatSettings.TimeSeparator := ':';
  FormatSettings.ShortTimeFormat := 'hh:nn';
  FormatSettings.LongTimeFormat  := 'hh:nn:ss'; // 'hh:mm'
  FormatSettings.ShortDateFormat := 'dd.mm.yyyy';
end;
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#14
(26-10-2021, Saat: 11:06)mrmarman Adlı Kullanıcıdan Alıntı: Projenizin girişinde aşağıdaki şekilde ( projenizin çalışma uzayında geçerli olmak üzere ) kullanılacak formatı belirleyebilirsiniz.

Kendi projelerimde şöyle bir procedure tanımlayıp ilk defasında çalıştırıyorum.

procedure SystemDateTimeStandart;
Var
// Tarih/Saat Formatları Sistemden Bağımsız Düzeltmek için
{$IF CompilerVersion >= 23}
  FormatSettings: System.SysUtils.TFormatSettings;
{$ELSE}
  FormatSettings: TFormatSettings;
{$IFEND}
begin
  Application.UpdateFormatSettings := False;
{$IF CompilerVersion >= 23}
  FormatSettings := TFormatSettings.Create(LOCALE_SYSTEM_DEFAULT);
{$ELSE}
  GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, FormatSettings);
{$IFEND}
  FormatSettings.ThousandSeparator := ',';
  FormatSettings.DecimalSeparator  := '.';
  FormatSettings.DateSeparator := '.';
  FormatSettings.TimeSeparator := ':';
  FormatSettings.ShortTimeFormat := 'hh:nn';
  FormatSettings.LongTimeFormat  := 'hh:nn:ss'; // 'hh:mm'
  FormatSettings.ShortDateFormat := 'dd.mm.yyyy';
end;

önceki versiyonlarımda buna benzer bişey denemiştim.. bir yerlerde hata vermişti ama tekrar deniyecem
çalışma uzayında geçerli cümlesini anlamadım..
Cevapla
#15
Delphi sürümüne göre değişen ayarlar var. Burada verdiğim koddaki direktifler bunun için. Hata alırsanız bildirin ona göre bakalım.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#16
(26-10-2021, Saat: 12:12)mrmarman Adlı Kullanıcıdan Alıntı: Delphi sürümüne göre değişen ayarlar var. Burada verdiğim koddaki direktifler bunun için. Hata alırsanız bildirin ona göre bakalım.

10.3 versiyon

formun oncreate yazdım bişey değişmedi...
Cevapla
#17
Değişmeyen nedir ? Öncesi sonrası. Sistem ayarlarınız nedir. Windows versiyonu dil/ülke ayarlarınız vs. Nedir ???

Internetten gelen veriyi mi yoksa lokal veriyi mi sorguluyorsunuz. Tarihi / saati String'e nasıl çeviriyorsunuz. FormatDateTime mi yoksa sadece dateToStr mi... EncodeDateTime kullanıyor musunuz vs. vs. vs. sorular olmadan sadece çalışmadı demek kolaydır  Smile

Müneccimlik modumu özellikle kapalı tutuyorum ki siz de bir kaç şey anlatın isterim. Yazmak güzeldir dinlemek daha güzel.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#18
(26-10-2021, Saat: 12:25)mrmarman Adlı Kullanıcıdan Alıntı: Değişmeyen nedir ? Öncesi sonrası. Sistem ayarlarınız nedir. Windows versiyonu dil/ülke ayarlarınız vs. Nedir ???

Internetten gelen veriyi mi yoksa lokal veriyi mi sorguluyorsunuz. Tarihi / saati String'e nasıl çeviriyorsunuz. FormatDateTime mi yoksa sadece dateToStr mi... EncodeDateTime kullanıyor musunuz vs. vs. vs. sorular olmadan sadece çalışmadı demek kolaydır  Smile

Müneccimlik modumu özellikle kapalı tutuyorum ki siz de bir kaç şey anlatın isterim. Yazmak güzeldir dinlemek daha güzel.

haklısınız... 
windows 10
bölge ayarım şu an ingilizce(amerika)
local veri

basit bir formda veritabına bağlandım..
tdbdatetimepicker da tarih formatı ingilizce görünüyor.... (10/26/2021)
herhangi bir çevirme yapmadan formatın değişmesi gerekmiyormu..

uses
 Vcl.Forms,
 Unit1 in 'Unit1.pas' {Form2};

{$R *.res}



begin
SystemDateTimeStandart;
 Application.Initialize;
 Application.MainFormOnTaskbar := True;
 Application.CreateForm(TForm2, Form2);
 Application.Run;
end.
Cevapla
#19
Şöyle bir düzenleme yapalım... sadece VAR kısmını attık SYSUTILS altındaki FormatSettings variable üzerine çalıştık. Ben projeden alınca size aktarmak için direkt var kısmını globalden locale almıştım göstermek için. Projede bir sınıfım var onun FFormatSettings değeridir. Projeye özel bir konu çünkü onu atlamışım...


procedure SystemDateTimeStandart;
begin
  Application.UpdateFormatSettings  := False;
  FormatSettings.ThousandSeparator  := ',';
  FormatSettings.DecimalSeparator   := '.';
  FormatSettings.DateSeparator      := '.';
  FormatSettings.TimeSeparator      := ':';
  FormatSettings.ShortTimeFormat    := 'hh:nn';
  FormatSettings.LongTimeFormat     := 'hh:nn:ss';
  FormatSettings.ShortDateFormat    := 'dd.mm.yyyy';
end;




hatta şöyle bir test yapın

procedure TForm1.Button1Click(Sender: TObject);
Var
  Tarih1 : String;
  Tarih2 : String;
begin
  Tarih1 := DateTimeToStr( now() );

  SystemDateTimeStandart();

  Tarih2 := DateTimeToStr( now() );

  Showmessage( Tarih1 + sLineBreak + Tarih2 );
end;


Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#20
(26-10-2021, Saat: 13:09)mrmarman Adlı Kullanıcıdan Alıntı: Şöyle bir düzenleme yapalım... sadece VAR kısmını attık SYSUTILS altındaki FormatSettings variable üzerine çalıştık. Ben projeden alınca size aktarmak için direkt var kısmını globalden locale almıştım göstermek için. Projede bir sınıfım var onun FFormatSettings değeridir. Projeye özel bir konu çünkü onu atlamışım...


procedure SystemDateTimeStandart;
begin
  Application.UpdateFormatSettings  := False;
  FormatSettings.ThousandSeparator  := ',';
  FormatSettings.DecimalSeparator   := '.';
  FormatSettings.DateSeparator      := '.';
  FormatSettings.TimeSeparator      := ':';
  FormatSettings.ShortTimeFormat    := 'hh:nn';
  FormatSettings.LongTimeFormat     := 'hh:nn:ss';
  FormatSettings.ShortDateFormat    := 'dd.mm.yyyy';
end;




hatta şöyle bir test yapın

procedure TForm1.Button1Click(Sender: TObject);
Var
  Tarih1 : String;
  Tarih2 : String;
begin
  Tarih1 := DateTimeToStr( now() );

  SystemDateTimeStandart();

  Tarih2 := DateTimeToStr( now() );

  Showmessage( Tarih1 + sLineBreak + Tarih2 );
end;



şimdilik sorun yok.. herşey yolunda.... sadece gridlerde ve db neslerde ingilizce formatı gösteriyor o da problem değil formatından displayformattan değiştircem.....
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
Question Delphi formunu nasıl otomatik tam ekran yapabilirim ? erdemklt0 2 669 23-01-2026, Saat: 10:02
Son Yorum: csunguray
  TMS Web Core- REST İşlemlerini Nasıl Yapabilirim? kajmerantime 0 540 13-06-2025, Saat: 14:07
Son Yorum: kajmerantime
  Delphi 7 deki pencereleri nasıl sabitleyebilirim? mxpain 1 666 12-12-2024, Saat: 08:50
Son Yorum: 3ddark
  resimdeki hatanin satirini nasil bulabiliriz. sadikacar60 6 1.468 25-11-2024, Saat: 19:18
Son Yorum: sadikacar60
  Programdaki donmanin sebebi nasil yakalanir. sadikacar60 2 903 17-10-2024, Saat: 18:21
Son Yorum: sadikacar60



Konuyu Okuyanlar: 1 Ziyaretçi