2

最近、一部のコードを VB6 から Net 4 に移行しました。コードの中に次の行がありました。

If Now<CDate("28-08-2012") Then

お客様の 1 人がプログラム エラーのためにサポートに連絡しましたが、ロケールが英語 (米国) に設定されていたため、この行でコンピューターがエラーを生成したことが明らかになりました。まったく同じコードは、VB6 である間は爆撃しませんでした。

では、この違いはどのように説明されるのでしょうか。

(ネット コードからすべてのCDate関数を取り出し、yyyy,mm,ddDateTimeコンストラクターに置き換えようとしています)

4

1 に答える 1

2

ここでの問題は、(悲しいことに) VB6 での CDate の熱心すぎる解析ルーチンだと思います。ロケールを英語 (米国) に設定すると、VB6 (および VBA) は次の 2 つの式に対して同じ日付を返します。

CDate("12-13-2000")
CDate("13-12-2000")

どちらも #12/13/2000# を返します。明らかに、最初の数字が月に変換できない場合 (たとえば 13)、その月の日と見なされます (非常に悪い仮定です)。

それで、それはあります。

于 2012-08-28T21:38:08.647 に答える