私はあなたの問題を熟考しましたが、昨日見逃した側面があります。意味のない機能だと思っていたのFormatですが、見た目が変でも意味があります。説明させてください。
VB6では
tAvailableDate = DateAdd("d", 21, Format(Now, gDATEFORMAT))
奇妙に見える (または間違っている) のはなぜですか? NowですDate。この日付を a (正確には aを含む a ) にFormat変換しますが、日数を追加するにはパラメーターが必要です。次のように宣言されています。StringVariantStringDateAddDateDateAdd
Function DateAdd(Interval As String, Number As Double, Date)
警告やコンパイラ エラーを表示する代わりに、VB6 はこの文字列を暗黙のうちに に変換してDateに渡しDateAddます。したがって、私の最初の仮定は、これをドロップすることでしたFormat。
しかし、これは がどのように定義さFormatれているかに応じて、結果に望ましい影響を与える可能性があります。gDATEFORMAT日付部分のみが含まれている場合gDATEFORMAT、フォーマット関数は時刻部分を削除します! ただし、これは、VB6 で関数Dateを使用する代わりに関数を使用することで簡単に実現できます。Now
tAvailableDate = DateAdd("d", 21, Date)
またはDateTime.Today.NET (C# または VB.NET)。
ただしgDATEFORMAT、月と年のみを含めることができます。VB6 (スイスのロケールを使用):
Date ==> 27.06.2012
Format(Date,"MM.yyyy") ==> "06.2012"
CDate(Format(Date,"MM.yyyy")) ==> 01.06.2012
ご覧のとおり、この場合、日付をフォーマットすると、現在の月の最初の日が返されます。21 日を追加すると、常に当月の 22 日になります。これは、現在の日付に 21 日を加算することとはまったく異なります。C#では、次の方法で同じことを達成できます
DateTime today = DateTime.Today;
tAvailableDate = new DateTime(today.Year, today.Month, 22);
どちらのアプローチが正しいかを判断するには、何が含まれているかを知るかgDATEFORMAT、これが変数の場合は日付をフォーマットし、結果の文字列を解析して日付を再度取得する必要があります。