私はあなたの問題を熟考しましたが、昨日見逃した側面があります。意味のない機能だと思っていたのFormat
ですが、見た目が変でも意味があります。説明させてください。
VB6では
tAvailableDate = DateAdd("d", 21, Format(Now, gDATEFORMAT))
奇妙に見える (または間違っている) のはなぜですか? Now
ですDate
。この日付を a (正確には aを含む a ) にFormat
変換しますが、日数を追加するにはパラメーターが必要です。次のように宣言されています。String
Variant
String
DateAdd
Date
DateAdd
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
、これが変数の場合は日付をフォーマットし、結果の文字列を解析して日付を再度取得する必要があります。