Doğru Tarih Saate ulaşma
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Doğru Tarih Saate ulaşma
Öncelikle herkese kolaylıklar diliyorum.
Yapılacak olan programda kayıt tarih ve saatinin doğru olarak kaydedilebilmesi için bir önerisi olan var mı ?
Anlatmak istediğim kullanıcı tarih ve saati değiştirerek farklı tarihlere kayıt yapamaması için şu an için doğru saati bir yerden okuyabilir miyiz ?
Mesela bios veya belki internet ama internet olmayabilir belki bios daha sağlam olur ,
herkese teşekkürler.
Yapılacak olan programda kayıt tarih ve saatinin doğru olarak kaydedilebilmesi için bir önerisi olan var mı ?
Anlatmak istediğim kullanıcı tarih ve saati değiştirerek farklı tarihlere kayıt yapamaması için şu an için doğru saati bir yerden okuyabilir miyiz ?
Mesela bios veya belki internet ama internet olmayabilir belki bios daha sağlam olur ,
herkese teşekkürler.
- adelphiforumz
- Üye
- Mesajlar: 602
- Kayıt: 01 Nis 2008 05:38
- Konum: İstanbul
Re: Doğru Tarih Saate ulaşma
sql server kullanıyorsan Select getdate() as zaman diyebilirsin
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Re: Doğru Tarih Saate ulaşma
Bu alanları DB tarafında doldurabilirsiniz. Eğer DB'de aynı makinada ise, internet bağlantısı üzerinden belli aralıklarlarla tarihin düzgün olup olmadığını kontrol etmeniz mümkün. Jedi içinde hazır bir NTP componenti vardı diye hatırlıyorum.
Re: Doğru Tarih Saate ulaşma
çok teşekkürler , aslında her ikiside var SQl kullanmayı düşünüyorum kendi bilgisayarında olacağı için sanırım onunda çok bir fayası olmayacak , internet biraz sıkıntılı ne kadar süre olur olmaz emin değilim fikirlerinizi paylaştığınız için tekrar teşekkür ediyorum.
Re: Doğru Tarih Saate ulaşma
Aşağıdaki fonksiyonlar ile tarih ve saati MS SQL Server sunucusundan çekebilirsiniz.
Kod: Tümünü seç
function TForm1.ServerNow: TDateTime;
var
Q1: TADOQuery;
begin
Q1 := TADOQuery.Create(Self);
try
Q1.Connection := AppConnection;
Q1.SQL.Text := 'SELECT GETDATE() AS CurrentDateTime';
Q1.Open;
Result := Q1.FieldByName('CurrentDateTime').Value;
Q1.Close;
finally
Q1.Free;
end;
end;
function TForm1.ServerDate: TDateTime;
begin
Result := Trunc(ServerNow);
end;
function TForm1.ServerTime: TDateTime;
begin
Result := Frac(ServerNow);
end;
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/)
Re: Doğru Tarih Saate ulaşma
csunguray kardeşim teşekkür ederim.
Ama local de çalışacak SQl ve Program aynı bilgisayarda kurulu olacak buna rağmen bilgisayar saati farklı ise yinede işe yarar mı ? tarihi bilgisayardan çekmiyor mu ?
Ama local de çalışacak SQl ve Program aynı bilgisayarda kurulu olacak buna rağmen bilgisayar saati farklı ise yinede işe yarar mı ? tarihi bilgisayardan çekmiyor mu ?
Re: Doğru Tarih Saate ulaşma
Program eğer lokalde çalışacaksa ve kullanıcının administrator yetkisi varsa kullanıcı her şeyi yapabilir anlamına gelir. Bunu engellemek için şöyle önlemler geliyor aklıma:
1. administrator harici normal bir kullanıcı oluşturun, programı kullanan kişi oradan giriş yapsın.
2. Registry'en veya güvenlik ilkelerinden tarih/saatin değiştirilmesini engelleyebilirsiniz. (https://www.sevenforums.com/tutorials/1 ... nging.html )
3. Yeni bir kayıt eklerken kayıt tarih/saatini kaydeder, sonraki kayıtlarda bundan daha eski bir kayıt girilmesini engellersiniz.
En son csunguray tarafından 11 Eki 2017 03:29 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
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/)
Re: Doğru Tarih Saate ulaşma
Merhaba,
@csunguray cevabına ek olarak aşağıdaki bağlantıdaki ticari kullanımı ücretsiz sistem saatini doğru tutmaya yarayan uygulamayı inceleyebilirsiniz.
http://www.timesynctool.com/
@csunguray cevabına ek olarak aşağıdaki bağlantıdaki ticari kullanımı ücretsiz sistem saatini doğru tutmaya yarayan uygulamayı inceleyebilirsiniz.
http://www.timesynctool.com/
-
- Üye
- Mesajlar: 401
- Kayıt: 22 Tem 2004 02:03
- Konum: sıkıntı çekmişlere yakın bi yerden
Re: Doğru Tarih Saate ulaşma
https://timezonedb.com rest apisi var. kullanımıda basit
bedava versiyonundan saniyede bir sorgu çekebilirsiniz.
bedava versiyonundan saniyede bir sorgu çekebilirsiniz.
type
Tform1 = class(Tform)
Tform1 = class(Tform)
-
- Üye
- Mesajlar: 189
- Kayıt: 30 Eyl 2013 10:17
Re: Doğru Tarih Saate ulaşma
csunguray in 3. onerisinde oldugu gibi yeni kayit girislerinde o anki tarih ve saat bilgisini bir alana kaydedersiniz. Sonra her islemde bu tarih ve saatle karsilastirma yaparsiniz. Eger tarih son kayitli tarihten kucukse isleme izin vermezsiniz. Değilse islemi yaptirir ve son islem tarihini bu ana ayarlarsaniz.
Ben de bu yontemi kullaniyorum bir projemde.
Ben de bu yontemi kullaniyorum bir projemde.
Re: Doğru Tarih Saate ulaşma
Herkese çok teşekkür ediyorum , Sağolun hepside uygulabilir mantıklı öneriler aslında sadece internet de zaman zaman sıkıntı olabilieceği için sanki son kaydedilen tarihi kontrol etmek daha mantıklı olabiliecek gibi.
Herkese çok teşekkür ediyorum. Sağolun.
Herkese çok teşekkür ediyorum. Sağolun.
Re: Doğru Tarih Saate ulaşma
Eğer database ve uygulama aynı sistemde çalışıyor ise ve tarih saatin hatalı olabileceğine dair endişe var ise daha önce kaydedilen verilerin doğruluğu da sorgulanabilir. Diğer bir deyişle daha önce kaydedilen bilgiler de hatalı olabilir. Bu anlamda önceki kayıt zamanları ile kıyaslama yapma mantığı da hatalı sonuçlar doğurabilir.
Eğer tamamen doğru bilgi olması isteniliyor ise aşağıdaki gibi bir kod kullanılabilir. Hata oluşması halinde kayıt işlemine izin verilmez ise database içinde hatalı tarih içeren kayıt olmayacaktır.
Kullanımı aşağıdaki gibi olacaktır.
Tabi yukarıdaki kodun çalışması için internet bağlantısı gerekecektir. İnternet bağlantısı olmadığı durumlarda veya zaman sunucusuna ulaşılamadığı durumlarda veya 2 saniye içinde cevap gelmediği zaman internet saati okunamayacak ve database kayıt girişine izin verilmemiş olacaktır.
Benzer bir yöntem olarak; uygulama ilk çalıştırıldığı zaman yukarıdaki yöntem ile doğru saat öğrenilerek PC sistem saati öğrenilen doğru saate ayarlanabilir. Ancak uzun süre açık kalacak uygulamalar için bir süre sonra PC saatinin yine hatalı bir değer içermesi olasıdır.
Sistem saatini güncellemek için aşağıdaki gibi bir kod kullanılabilir.
Alternatif karma bir yöntem olarak; uygulama ilk açıldığı zaman internetten doğru saati öğrenip sistem saatini günceller. Belirli zaman aralıklarında internet saati okunur, sistem saati ile önemli bir farkı olup olmadığına göre sistem saati güncellemesi tekrarlanabilir.
Sonunda yöntem saat doğruluğunun ne derece öncelikli olduğuna göre belirlenecektir.
Eğer tamamen doğru bilgi olması isteniliyor ise aşağıdaki gibi bir kod kullanılabilir. Hata oluşması halinde kayıt işlemine izin verilmez ise database içinde hatalı tarih içeren kayıt olmayacaktır.
Kod: Tümünü seç
uses
IdBaseComponent,
IdComponent,
IdUDPBase,
IdUDPClient,
IdSNTP,
DateUtils;
function GetInternetDateTime(out ADate: TDateTime; const DatePart: Boolean = False): Boolean;
var
TimeServer: TIdSNTP;
begin
TimeServer := TIdSNTP.Create(nil);
try
TimeServer.Host := 'pool.ntp.org';
// İsteğe bağlı olarak aşağıdaki 2 saniyelik zaman aşımı süresi değiştirilebilir.
TimeServer.ReceiveTimeout := 2000;
try
ADate := TimeServer.DateTime;
if DatePart then ADate := DateOf(ADate);
except
Exit(False);
end;
finally
TimeServer.Free();
end;
Result := True;
end;
Kod: Tümünü seç
var
DogruTarih: TDateTime;
begin
{ Database kaydı girilmeden önce aşağıdaki yöntemlerden biri ile kontrol yapılarak duruma göre kayıt girişine engel olunabilir. }
// Sadece tarih bilgisi almak için
if not GetInternetDateTime(DogruTarih, True) then Exit();
// Tarih ve saat bilgisi birlikte olacak şekilde
if not GetInternetDateTime(DogruTarih) then Exit();
// Tarih ve saat bilgisi birlikte olacak şekilde alternatif kullanım
if not GetInternetDateTime(DogruTarih, False) then Exit();
end;
Benzer bir yöntem olarak; uygulama ilk çalıştırıldığı zaman yukarıdaki yöntem ile doğru saat öğrenilerek PC sistem saati öğrenilen doğru saate ayarlanabilir. Ancak uzun süre açık kalacak uygulamalar için bir süre sonra PC saatinin yine hatalı bir değer içermesi olasıdır.
Sistem saatini güncellemek için aşağıdaki gibi bir kod kullanılabilir.
Kod: Tümünü seç
uses
Winapi.Windows;
function SetSystemDateTime(const ADateTime: TDateTime): Boolean;
var
SystemTime: TSystemTime;
begin
DateTimeToSystemTime(ADateTime, SystemTime);
Result := SetLocalTime(SystemTime);
if Result then PostMessage(HWND_BROADCAST, WM_TIMECHANGE, 0, 0);
end;
Sonunda yöntem saat doğruluğunun ne derece öncelikli olduğuna göre belirlenecektir.