windows Tarih formatını Değişme
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 261
- Kayıt: 21 Tem 2006 04:59
- İletişim:
windows Tarih formatını Değişme
Selam ve saygılar arkadaşlar..... Özellikle veri tabanlı projemizde Türkçe dil ayarlarında default olarak tarih formatı gg.aa.yyyy şeklindedir. ancak bazı pc lerde ya ekledikleri başka programlar yada müdahaleler sonucunda tarih formatı aa.gg.yyyy yada aa.gg.yy olabilmektedir. Bu da bizim veri çekme esnasınnda hata vermektedir. ya veriler gelmiyor yada1899 gibi garip bi tarih hatası veriyor. Bu hatalar bi programcıların güvenilirliğini azaltmaktadır. Forumda aradım yalnız sonuca ulaşan bir arkadaşyada çözüm bulamadım. Bulup birlikte paylaşalım. ekleyeceğim kod tarih bileşenleri olan formlarda otomatik olarak tarih formatını gg.aa.yyyy değiştirmesi lazım. shortdateformat:='dd.mm.yyyy' kullanıyorum çözüm olmuyor. Değiştiğimde formlardaki bileşenlerdeki tarih formatı da değişmesi lazım. Çünkü formatı windowsun tarih formatından alıyor.
saygılarımla
saygılarımla
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Re: windows Tarih formatını Değişme
Ana formun bulunduğu pas dosyasının en altınaşeklinde bir kod yazarsanız, windows ayarları ne olursa olsun program kendi içinde bu ayarlara göre çalışacaktır.
Kod: Tümünü seç
initialization
DateSeparator := '.';
ShortDateFormat := 'dd.mm.yyyy';
end.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
-
- Üye
- Mesajlar: 261
- Kayıt: 21 Tem 2006 04:59
- İletişim:
Re: windows Tarih formatını Değişme
şaban bey ilgi ve alakınıza çok teşekkür ederim. yalnız dediğinizi yapmam rağmen hala windowsun ayarlarını kullanmakta. denem amaçlı bi proje yaptım ana formun en altına verdiğiniz kodu ekledim. derleme yaptım. daha sonra windowsun tarih dil ayarından formatı değiştim. akabinde derleğim projeyi çalıştırıdım. proje içindeki tarih bileşeni hala windowsun formatına göre gösteriyordu. acaba ynlış yaptığım bir yer mi var?
ana formun unitin kodlarını ekliyorum
muhtemelen bi foncion yazıp tüm formlarda onu kullanacam. tarih bileşenlerini formatlayacam. en son çare sanırım bu olacak.
ana formun unitin kodlarını ekliyorum
Kod: Tümünü seç
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls;
type
TForm1 = class(TForm)
DateTimePicker1: TDateTimePicker;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
initialization
DateSeparator := '.';
ShortDateFormat := 'dd.mm.yyyy';
end.
Re: windows Tarih formatını Değişme
Hangi veritabanını ve hangi bileşenleri kullanıyorsun.
Yukarıda verilen ayarlar format, formatdate, strToDate gibi delphi fonksiyonlari ve standart bileşenler tarafından kullanılır. Ama firebird ve mysql gibi veritabanları ayrı sistemlerdir. Bunlara parametre degil de string olarak geçilen tarih bilgilerini özel formatta olmalıdır.
Örnegin firebird aşagıdaki gibi bilgileri kabul eder.
http://www.firebirdfaq.org/faq137/
DD.MM.YYYY
MM/DD/YYYY
YYYY-MM-DD
Yukarıda verilen ayarlar format, formatdate, strToDate gibi delphi fonksiyonlari ve standart bileşenler tarafından kullanılır. Ama firebird ve mysql gibi veritabanları ayrı sistemlerdir. Bunlara parametre degil de string olarak geçilen tarih bilgilerini özel formatta olmalıdır.
Örnegin firebird aşagıdaki gibi bilgileri kabul eder.
http://www.firebirdfaq.org/faq137/
DD.MM.YYYY
MM/DD/YYYY
YYYY-MM-DD
-
- Üye
- Mesajlar: 261
- Kayıt: 21 Tem 2006 04:59
- İletişim:
Re: windows Tarih formatını Değişme
emin bey selamlar...
yukardaki kodu standart bileşenle yaptım. normalde firebird 2.0 kullanıyorum. aslında kodlarda fark yok sadece byük küçük harf farklılığı var. sizin bi öneriniz var. tüm projede her formda tek tek kod yazmak istemiyorum. ana formun açılışında bi kaç satıt kodla windowsun tarih formatını gün.ay.yıl şeklinde yaparsam hem benim işim hemde bu konua sıkıntı çeken tüm programcıların çözümü olacaktır.
saygılarımla
yukardaki kodu standart bileşenle yaptım. normalde firebird 2.0 kullanıyorum. aslında kodlarda fark yok sadece byük küçük harf farklılığı var. sizin bi öneriniz var. tüm projede her formda tek tek kod yazmak istemiyorum. ana formun açılışında bi kaç satıt kodla windowsun tarih formatını gün.ay.yıl şeklinde yaparsam hem benim işim hemde bu konua sıkıntı çeken tüm programcıların çözümü olacaktır.
saygılarımla
Re: windows Tarih formatını Değişme
Programlarda tarih formatının nasıl kullanıldıgına karışmıyorum. Kullanıcı neyi seçtiyse onu kullanabilmeli. Tabii dışarıdan bilgi alınıp, bilgi verilecekse bu işleri yapan fonksiyonları düzenliyorum.
Örnegin Merkez bankası döviz kurları gelirken tarih ayıracı . oluyor ve firebird e bilgi yollarken dikkatli olmak gerekiyor.
Doviz kurları alırken, şunu yapıyorum:
Firebird e tarih yollacaksam, aşagıdaki gibi bir fonksiyon kullanıyorum.
Bunların dışında veritabanı fonksiyonlarını kullanmak en dogrusu.
Sistem ayarlarını değiştirmeyi nedense pek şık bulmuyorum. Sorun çıkaran bölüm tespit edilip, orasının düzeltilmesi en dogru yaklaşım olur.
Örnegin Merkez bankası döviz kurları gelirken tarih ayıracı . oluyor ve firebird e bilgi yollarken dikkatli olmak gerekiyor.
Doviz kurları alırken, şunu yapıyorum:
Kod: Tümünü seç
temp_ch:=dateseparator;
dateseparator:='.';
try
....
finally
dateseparator:=temp_ch;
end;
Kod: Tümünü seç
function fbird_Tarih(dt1: TDateTime):string;
begin
result:=quotedstr(FormatDateTime('dd.mm.yyyy',dt1));
end;
Kod: Tümünü seç
stokdb.FieldByName('SATISTARIHI').AsDatetime; // tarih alanını tarih olarak almak için
stokdb.FieldByName('SATISTARIHI').AsString; // tarih alanını string olarak almak için
Re: windows Tarih formatını Değişme
proje dosyasına(*.dpr) program format ayarlarını belirterek windows sistem ayarlarını değiştirmeden kullanabilirsin.
böylelikle her sistemde sabit bir çalışma elde edersin.
begin
Application.Initialize;
Application.UpdateFormatSettings := False;
ThousandSeparator := ',';
DecimalSeparator := '.';
DateSeparator := '.';
TimeSeparator := ':';
ShortDateFormat := 'dd.mm.yyyy';
ShortTimeFormat := 'hh:mm';
LongTimeFormat := 'hh:mm';
end;
kolay gelsin...
böylelikle her sistemde sabit bir çalışma elde edersin.
begin
Application.Initialize;
Application.UpdateFormatSettings := False;
ThousandSeparator := ',';
DecimalSeparator := '.';
DateSeparator := '.';
TimeSeparator := ':';
ShortDateFormat := 'dd.mm.yyyy';
ShortTimeFormat := 'hh:mm';
LongTimeFormat := 'hh:mm';
end;
kolay gelsin...
Ayakkabıyı sefaletten
Çok sonraları tanıdım
Öyle ufuklarda mı olurmuş Allah'ım
Giyer giyer koşardım
Toprağın dostluğundan
Oyuncaklar yaptım çamurdan
Tenimin rengini aldım topraktan
Sen bakma esmerliğim sonradan...
http://www.tcct.us
-
- Üye
- Mesajlar: 261
- Kayıt: 21 Tem 2006 04:59
- İletişim:
Re: windows Tarih formatını Değişme
polat kardeşim gönderiğin kodu projenin neresinde kullanmam gerekli ana formda her hangi bir yerdemi yoksa başka bir yerdemi.
-
- Üye
- Mesajlar: 261
- Kayıt: 21 Tem 2006 04:59
- İletişim:
Re: windows Tarih formatını Değişme
şaban bey nezdinde tüm cevaplayan arkadaşlara teşekküer ederim. Şban beyin önerisi ile problem halloldu.
Re: windows Tarih formatını Değişme
Bu şekilde program yazarsanız yazdığınız program zayıf olur. Bence hiç bir zaman tarihin string şekli üzerinden işlem yapılmamalıdır. Ayrıca yazdığınız programlar windowsun bölgesel ayarlarına bağımlı olmamalıdır. Ayrıca programınız windowsun mevcut bölgesel ayarlarını değiştirmemelidir. Tarih işlemleri için ekseriyatla kullanmanız gereken fonksiyonlar aşağıdaki gibi olmalıdır.
olmak üzere
Belli bir tarih değerini edinme:
Bir tarihin gün, ay yıl değerlerini belirleme:
Bir tarihin string şeklini alma (Türk formatı):
Bir tarihin string şeklini alma (Ansi formatı. SQL sorgularda bu formatı kullanırsanız bir çok sql sunucusunda sorun yaşamazsınız):
Kod: Tümünü seç
Tarih: TDateTime;
Belli bir tarih değerini edinme:
Kod: Tümünü seç
Tarih := EncodeDate(2009, 11, 12);
Kod: Tümünü seç
DecodeDate(Tarih, Yil, Ay, Gun);
Kod: Tümünü seç
FormatDateTime('dd.mm.yyyy', Tarih);
Kod: Tümünü seç
FormatDateTime('yyyy-mm-dd', Tarih);
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri
Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
csunguray at netbilisim.kom
Net Bilişim Hizmetleri
Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Re: windows Tarih formatını Değişme
Veri tabanı ayrı telden, windows ayrı telden çalarsa büyük olasılıkla normalde sizde çalışan bu kodlar başka biçim ayarlanmış sistemlerde Runtime Error diyerek buhar olabiliyor. Bunu engellemek için projenizin çalıştığı sistemi veritabanına uyarlamanız veya veritabanını çalışan sisteme uyarlamanız gerekmektedir. En kolay ve ideal olanı ise sistem değişkenlerine başta bu değeri vermek olacağından ve sonuçta program için sistem ayarlarına müdahele olmadığından bu şekilde ayar çekmek olacaktır. İşin içinde veritabanı olmasa bu gibi kodlar zaten bir sorun çıkarmamaktadır ama o zaman da bu soru başlığı hiç açılmazdı
.

Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
Re: windows Tarih formatını Değişme
@csunguray
bölgesel ayarları değiştirme söz konusu değilki.program açılışında gerekli format ayarlarını yaptıktan sonra bağımlı kaldığın bir yer olmadığı için işletim sistemi ne ayarda olursa olsun sen kendi formatında çalışıyorsun böylece sabit bir çalışma elde etmiş olursunuz.
örnek:
bt.dpr
bölgesel ayarları değiştirme söz konusu değilki.program açılışında gerekli format ayarlarını yaptıktan sonra bağımlı kaldığın bir yer olmadığı için işletim sistemi ne ayarda olursa olsun sen kendi formatında çalışıyorsun böylece sabit bir çalışma elde etmiş olursunuz.
örnek:
bt.dpr
Kod: Tümünü seç
program bt;
uses
SysUtils,
Forms,
frmuMain in 'frmuMain.pas' {frmMain},
{$R *.RES}
begin
Application.Initialize;
Application.UpdateFormatSettings := False;
ThousandSeparator := ',';
DecimalSeparator := '.';
DateSeparator := '.';
TimeSeparator := ':';
ShortDateFormat := 'dd.mm.yyyy';
ShortTimeFormat := 'hh:mm';
LongTimeFormat := 'hh:mm';
Application.CreateForm(TfrmMain, frmMain);
Application.Run;
end.
Ayakkabıyı sefaletten
Çok sonraları tanıdım
Öyle ufuklarda mı olurmuş Allah'ım
Giyer giyer koşardım
Toprağın dostluğundan
Oyuncaklar yaptım çamurdan
Tenimin rengini aldım topraktan
Sen bakma esmerliğim sonradan...
http://www.tcct.us
Re: windows Tarih formatını Değişme
Açıkçası sistem ayarlarını pek kurcalamadığım için Application.UpdateFormatSettings özelliğinden haberim yoktu. Yararlı bir özellik. Programcının işini epeyce kolaylaştırıyor. Yine de şunu savunuyorum. Eğer kullanıcı bölgesel ayarları kendisine göre değiştirmişse bizim programımızın da buna uygun çalışmasını beklemek hakkıdır diye düşünüyorum.
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri
Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
csunguray at netbilisim.kom
Net Bilişim Hizmetleri
Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Re: windows Tarih formatını Değişme
Zaten verilen kodlar da bunu sağlamaktadır. Bu kodlar sisteme hiç bir etki yapmamaktadır ve değişik sistemlerde değişik ayarlara ayak uyduran program için gerekli kodlardır. Alt tarafı bir kaç değişkene başlangıçta değer atanmaktadır o kadar. Bunun windows ayarlarına hiç bir etkisi yoktur.csunguray yazdı:.. Eğer kullanıcı bölgesel ayarları kendisine göre değiştirmişse bizim programımızın da buna uygun çalışmasını beklemek hakkıdır diye düşünüyorum.
polatkadir yazdı:Kod: Tümünü seç
program bt; uses SysUtils, Forms, frmuMain in 'frmuMain.pas' {frmMain}, {$R *.RES} begin Application.Initialize; Application.UpdateFormatSettings := False; ThousandSeparator := ','; DecimalSeparator := '.'; DateSeparator := '.'; TimeSeparator := ':'; ShortDateFormat := 'dd.mm.yyyy'; ShortTimeFormat := 'hh:mm'; LongTimeFormat := 'hh:mm'; Application.CreateForm(TfrmMain, frmMain); Application.Run; end.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .