割り当てる方法がないようです ヌル (「割り当てられていない値"からTDateTime
変数へ。
私が想像した唯一の方法は、次のようなものを使用することです:
function isNull(aDate : TDateTime) : boolean;
const NullDate = 0.0;
var aNullDate : TDatetime;
ms : Int64;
begin
aNullDate := NullDate;
ms := MilliSecondsBetween(aDate,aNullDate);
result := (ms = Int64(0));
end;
日付値が0と重複しないより良い解決策を知っている人はいますか?
負のTDateTime
値は危険ですか? (以前の目的のための有能なリソースとして)
Andreasがすでに書いたように、 TDateTime
タイプは実際にはdouble
であり、「null可能」ではありません。私が使う
const
c_UnassignedDate = -693594;
空の日付値の場合、これは00/00/0000
の不可能な日付を表すため。しかし、たとえばDevExpressは
NullDate = -700000;
InvalidDate = NullDate + 1;
したがって、標準の値に同意されていないようです。必要に応じて選択してください。
最初に、「空のTDateTime
値」によって意味を定義する必要があります。
TDateTime
値は、整数部にエンコードされた日付と小数部にエンコードされた時刻を持つdoubleです。したがって、取得できる「null日付」に最も近いものは、おそらく0
です。
したがって、単にADate <> 0
をテストして、日付が「null」かどうかをテストします。
ただし、注意してください。TDateTime
ローカル変数を宣言した場合、値を指定する前に、必ずしも=0
になるとは限りません。何でもかまいません。もちろん、同じことがinteger
、double
、boolean
、...型の変数にも当てはまります。
また、値が0
のTDateTime
は、日付1899-12-30をエンコードすると思います。
最後に、負のTDateTime
値は完全に正常です。たとえば、-5000
は1886-04-22
に対応します。
私はあなたのコードの要点をまったく理解していません。 「未割り当て」値として0
を使用したい場合(1899-12-30に近い日付に興味がある場合は悪いことです)、なぜ単純にしないのですか?
function IsUnassigned(ADate: TDateTime): boolean;
begin
result := ADate = 0;
end;
または、おそらく(ただし同等ではありません!)、
function IsUnassigned(ADate: TDateTime): boolean;
begin
result := IsZero(Date);
end;
彼の答えでは、アインは「未割り当ての日付」の値にいくつかのより合理的な選択肢を与えました。
tDateTimeは、0から-1までの値に対しては未定義です。つまり、-0.5のtDateTimeは未定義の値であり、NaNの代わりにnullの日付に役立ちます。 DateTimeToStringは、+ 0.5と同じ-0.5を表示します。
TDateTimeの代わりにPDateTimeを使用し、nil値として送信します。値へのポインタがない場合、結果はありません。
値を確認するには、Assigned ptrを使用します。
MyDatePointer := nil;
if ( Assigned(MyDatePointer)) then ...
ライブラリのユニット_Spring.Persistence.Core.Session.pas
_でSpring Framework for Delphi( http://www.spring4d.org )inメソッド_TSession.ExecuteScalar<T>
_ NULLの場合、結果使用値Default(T);
あなたの機能は
_function IsNull(ADate: TDateTime): Boolean;
begin
Result := ADate = Default(TDateTime);
end;
_