İlk (önceki amaçla yetenekli bir kaynak olarak) size 'boş TDateTime
değeri' ile ne demek tanımlamanız gerekir.
bir TDateTime
değeri tam sayı kısmı ve fraksiyonel kısmında kodlanmış zaman kodlanmış tarihi ile iki katıdır. Yani, 'null date' için en yakın şey muhtemelen 0
'dur.
Dolayısıyla, sadece tarih 'boş' olup olmadığını test etmek ADate <> 0
test edin.
Ancak dikkat: TDateTime
yerel değişkenini bildirirseniz, bir değer vermeden önce mutlaka =0
olmaz. Her şey olabilir. Tabii ki, aynı şey değere 0
ile TDateTime
tarihi 1899/12/30 kodlar inanıyoruz ... tip integer
, double
, boolean
, değişkenlerine Ayrıca
geçerlidir.
Son olarak, negatif TDateTime
değerler ve normaldir. Örneğin, -5000
, 1886-04-22
'a karşılık gelir.
Kodunuzu tam olarak anlamıyorum. Eğer (eğer 1899-12-30 yakın tarihlerde ilgileniyorsanız kötü) 'atanmamış' değeri olarak 0
kullanmak istiyorsanız, neden olasılıkla (ama eşit biçimde, sadece
function IsUnassigned(ADate: TDateTime): boolean;
begin
result := ADate = 0;
end;
ya da değil!), Cevaben
function IsUnassigned(ADate: TDateTime): boolean;
begin
result := IsZero(Date);
end;
, ain 'atanmamış tarihi' değeri için daha makul seçimler bir çift verdi. Andreas zaten yazdığı gibi
Bu işlevi kullanmayı düşünürseniz, sanırım "NullDate" global bir sabit olmalı? –
Sıfır değerine sahip TDateTime değişkeni const değeri 0 ile karşılaştırırken sorunlarla karşılaştım. A _simple_ ** bu seçenek 'var v_datetime: TDatetime;' 'v_datetime: = 0; 'if (v_datetime = 0) o zaman actionToTake' – xsubira
Bunun nedeni, kayan noktalı fuzz olmasıdır. 'Math.IsZero' kullanın. –