Delphi Can
[ÇÖZÜLDÜ]Server İşletim Sisteminde Çalışan Windows Servis te is not a valid date Hata - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Genel Programlama (https://www.delphican.com/forumdisplay.php?fid=6)
+--- Konu Başlığı: [ÇÖZÜLDÜ]Server İşletim Sisteminde Çalışan Windows Servis te is not a valid date Hata (/showthread.php?tid=3910)



[ÇÖZÜLDÜ]Server İşletim Sisteminde Çalışan Windows Servis te is not a valid date Hata - theSinan - 26-08-2019

S.a 
Otomatik Yedekleme yapmak için Ufak bir Servis Yazıyorum
Servis Windows 7 ve Windows 10 Çalışıyor ancak aynı servisi Windows 2008 R2 Çalıştırdığımda
Servis içerisinde Stringten Tarihe Dönüşüm Yaptığımğım Satır

Kod:
TDateTime TYedekleme_Tarihi = Now ();
TYedekleme_Tarihi          = StrToDate( '17.08.2019');


is not a valid date Hatası Veriyor
Server Tarih Ataması nasıl olmalı


Server İşletim Sisteminde Çalışan Windows Servis te is not a valid date Hatası - meko - 26-08-2019

strtodate yerine encodedate fonksiyonu ile dener misin.


Server İşletim Sisteminde Çalışan Windows Servis te is not a valid date Hatası - 3ddark - 26-08-2019

Muhtemelen tarih formatı Windows ile server farklı özellikle kısa tarih formatına bakın


Server İşletim Sisteminde Çalışan Windows Servis te is not a valid date Hatası - shooterman - 26-08-2019

selamlar, aynı konu 2 gün önce benim başıma geldi. Windows 10 işletim sisteminde yapmış olduğum programda normal olarak çalışırken, server 2018 de çalışmadı program. Tarih sorgusunun devamına +'AM' veya da +'PM' kodunu da ekleyince sorunum tamamen çözülmüş oldu. Aşağıdaki şekilde deneyebilirsin. Ama serverin bölgesel ayarlarından kısa tarih ve uzun tarih ile saat ayarlarını iki haneli hale getirmeyi unutma..

if edit3.Text = '11:00:00 PM' then

  begin



Cvp: Server İşletim Sisteminde Çalışan Windows Servis te is not a valid date Hatası - theSinan - 26-08-2019

(26-08-2019, Saat: 20:46)3ddark Adlı Kullanıcıdan Alıntı: Muhtemelen tarih formatı Windows ile server farklı özellikle kısa tarih formatına bakın

Hem Server 2008 de hemde windows 7 
kısa tarih formatı gg.aa.yyyy
Uzun tarih formatı gg aaaa yyyy gggg
Her ikinsinde tarih formatı aynı
ayrı kodları vcl forma yapıştırıp server 2008 çalıştırdıgımda sorun olmuyor
Serviste neden hata veriyor anlayamadım

strtodate yerine encodedate fonksiyonu kullanmak istemiyorum 

Çünkü hem strtodate kullanımı daha basit 

Hemde strtodate strtotime servisin birçok yerinde kullandım



A.s Wiseman 


Yarın deneyip bilgi vereceğim inşaallah 


Server İşletim Sisteminde Çalışan Windows Servis te is not a valid date Hatası - ahmet_sinav - 26-08-2019

Çünkü service olarak çalıştığındaki user ile vcl olarak çalışan user farklı . Muhtemeldir ki service olarak çalışırken kullandığı user in formatı farklı. Format settings. Shirtdatrformati setlersen sorunun çözülür. Hatta bunu bir alışkanlık haline getirmek icab eder ki sonradan sonradan ayrı ayrı ama aynı konu hakkında mülahazalara girmeyesin.


Cvp: Server İşletim Sisteminde Çalışan Windows Servis te is not a valid date Hatası - theSinan - 26-08-2019

(26-08-2019, Saat: 21:57)wiseman Adlı Kullanıcıdan Alıntı: selamlar, aynı konu 2 gün önce benim başıma geldi. Windows 10 işletim sisteminde yapmış olduğum programda normal olarak çalışırken, server 2018 de çalışmadı program. Tarih sorgusunun devamına +'AM' veya da +'PM' kodunu da ekleyince sorunum tamamen çözülmüş oldu. Aşağıdaki şekilde deneyebilirsin. Ama serverin bölgesel ayarlarından kısa tarih ve uzun tarih ile saat ayarlarını iki haneli hale getirmeyi unutma..

if edit3.Text = '11:00:00 PM' then

  begin

(26-08-2019, Saat: 22:44)ahmet_sinav Adlı Kullanıcıdan Alıntı: Çünkü service olarak çalıştığındaki user ile vcl olarak çalışan user farklı . Muhtemeldir ki service olarak çalışırken kullandığı user in formatı farklı. Format settings. Shirtdatrformati setlersen sorunun çözülür. Hatta bunu bir alışkanlık haline getirmek icab eder ki sonradan sonradan ayrı ayrı ama aynı konu hakkında mülahazalara girmeyesin.

Evet servis ile vcl form ayrı kullanicilarda çalışıyor
Yarın Format settings deneyeyim inşallah 
Yardımlarınız için allah razı olsun


ÇÖZÜLDÜ: Server İşletim Sisteminde Çalışan Windows Servis te is not a valid date Hata - theSinan - 27-08-2019

Sorunum Servis ile Çalıştığı System Kullanıcısının Tarih ayarları ingilizce olmasından kaynaklanıyormuş

Kod:
TFormatSettings *FS = new TFormatSettings();
    FS->DateSeparator = '.';
    FS->ShortDateFormat ="dd.mm.yyyy";
    FS->LongDateFormat  ="dd.mm.yyyy hh:ss:nn";
    FS->LongTimeFormat  ="hh:nn:ss";
    FS->TimeSeparator   =':';

Bu Şekilde Çözdüm 
Yarımlarınlarınız için allah razı olsun


[ÇÖZÜLDÜ]Server İşletim Sisteminde Çalışan Windows Servis te is not a valid date Hata - sabanakman - 27-08-2019

İlave olarak connection nesnesi ile sql e bağlandıktan hemen sonra "set dateformat dmy" gibi bir sorgu ile o bağlantıda çalışan sorgularda kullanılacak formatı ayarlayabilirsiniz.


Cvp: [ÇÖZÜLDÜ]Server İşletim Sisteminde Çalışan Windows Servis te is not a valid date Hata - adelphiforumz - 28-08-2019

DPR içerisinde aşağıdaki yöntemlerden biri kullanılabilir

procedure pr_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;

initialization
Application.UpdateFormatSettings := False;
SysUtils.FormatSettings.ThousandSeparator := '.';
SysUtils.FormatSettings.DecimalSeparator := ',';
SysUtils.FormatSettings.DateSeparator := '.';
SysUtils.FormatSettings.TimeSeparator := ':';
SysUtils.FormatSettings.ShortDateFormat := 'dd.mm.yyyy';
SysUtils.FormatSettings.ShortTimeFormat := 'hh:nn';
SysUtils.FormatSettings.LongTimeFormat := 'hh:nn:ss';
SysUtils.FormatSettings.CurrencyString:='₺';