ich über Ihr Problem gedacht haben, und es ist ein Aspekt, den ich gestern verpasst. Ich dachte, dass die Format
Funktion keinen Sinn machte, aber, auch wenn es seltsam aussieht, kann es Sinn machen. Lassen Sie mich erklären.
In VB6 haben wir
tAvailableDate = DateAdd("d", 21, Format(Now, gDATEFORMAT))
Warum es seltsam (oder sogar falsch) aus? Now
ist ein Date
. Format
konvertiert dieses Datum in eine String
(gut zu einem Variant
mit einem String
, um genau zu sein), aber DateAdd
benötigt einen Date
Parameter, um Tage hinzufügen zu können. DateAdd
wird wie folgt erklärt:
Function DateAdd(Interval As String, Number As Double, Date)
Statt eine Warnung oder einen Compiler-Fehler geben, VB6 wandelt leise diese Zeichenfolge zurück zu einem Date
und übergibt sie an DateAdd
. Also meine erste Annahme war, einfach diese Format
fallen zu lassen.
ABER diese Format
kann einen gewünschten Effekt auf das Ergebnis haben, je nachdem wie gDATEFORMAT
definiert ist. Wenn gDATEFORMAT
nur einen Datumsteil enthält, wird durch die Formatfunktion der Zeitteil gelöscht!Allerdings könnte dies einfach mithilfe der Date
Funktion anstelle der Verwendung der Now
Funktion in VB6
tAvailableDate = DateAdd("d", 21, Date)
oder DateTime.Today
in .NET (C# oder VB.NET) erreicht werden.
Aber gDATEFORMAT
könnte nur Monat und Jahr enthalten. VB6 (mit meinem Schweizer locale):
Date ==> 27.06.2012
Format(Date,"MM.yyyy") ==> "06.2012"
CDate(Format(Date,"MM.yyyy")) ==> 01.06.2012
Wie Sie sehen können, führen würde, dass das Datum der Formatierung den ersten Tag des laufenden Monats in diesem Fall zurückzukehren. Wenn Sie 21 Tage hinzufügen, erhalten Sie immer den 22. des aktuellen Monats. Das ist ganz anders als 21 Tage zum aktuellen Datum hinzuzufügen! In C# Sie das gleiche mit
DateTime today = DateTime.Today;
tAvailableDate = new DateTime(today.Year, today.Month, 22);
Um erreichen könnte, um zu entscheiden, welcher Ansatz richtig ist, müssen Sie entweder wissen, was gDATEFORMAT
enthält oder wenn diese Variable ist, formatieren Sie das Datum und dann analysieren, um die resultierende Zeichenfolge ein erhalten Datum erneut.
Was versuchen Sie zu erreichen? Wenn Sie uns das sagen könnten, würden Sie nur Leute brauchen, die .NET kennen, nicht Leute, die .NET * und * VB6 kennen. –