|
> と書いておりました。 > > If文の中に入らない事を想定していたのですが、分岐に入ってしまいました。。。 > うーん...
No38723 の私のコメントで、 >> DateDiff(DateInterval.Minute, dtYmdhms_A, dtYmdhms_B) >という場合、A < B の場合にDateDiffは正の値を返します。A > Bの場合に負の値です。 >逆で判断していませんか?
と指摘している通りなのですが、うまく伝わってないように見えるので、補足しておきます。
> ちなみに > >どのように判断しているのかが記載されていませんが > > Dim dtYmdhms_A As Date = Date.ParseExact("20090610203839", "yyyyMMddHHmmss", CultureInfo.InvariantCulture) > Dim dtYmdhms_B As Date = Date.ParseExact("20090610110838", "yyyyMMddHHmmss", CultureInfo.InvariantCulture) > > Dim lRet As Long = DateDiff(DateInterval.Minute, dtYmdhms_A, dtYmdhms_B) > > If lRet > 0 Then > '処理 > End If
If文の比較式が逆だったようですね。正しくは If lRet > 0 Then ' dtYmdhms_Bの方が大きいので、dtYmdhms_Bを使って処理する End If か If lRet < 0 Then ' dtYmdhms_Aの方が大きいので、dtYmdhms_Aを使って処理する End If のどちらかですね。
以下のようにDateDiff関数の使い方を調べる実験プログラムを組んでみれば一目瞭然です。
Dim dtA As Date = #6/10/2009 11:03:01 AM# ' 11時 Dim dtB As Date = #6/10/2009 8:03:01 PM# ' 20時
Console.WriteLine(DateDiff(DateInterval.Minute, dtA, dtB)) ' 540 Console.WriteLine(DateDiff(DateInterval.Minute, dtB, dtA)) ' -540
DateDiffの結果が正の数になるときの日付の引数の並びは、 第二引数の日付が過去で、第三引数の日付は未来を指定すると覚えると良いです。 つまり、dtA、dtBの順で指定する場合、dtBの方が未来である場合に戻り値は正の数になります。
誕生日から今時点までの日数を求めるという例で考えると直感的にわかりやすいかと思います。 DateDiff(DateInterval.DayOfYear, 誕生日, DateTime.Now))
|