2012-06-26 5 views
6

ich den folgenden Code in vb haben -Konvertieren DateAdd und Format-Code von VB6 zu C#

tAvailableDate = DateAdd("d", 21, Format(Now, gDATEFORMAT)) 

ich dies in C# zu konvertieren bin versucht.

Ich habe dies so weit umgewandelt -

tAvailableDate = DateAdd("d", 21, Format (DateTime.Now, Global.gDATEFORMAT)); 

Aber ich kann nicht einen Ersatz für die DateAdd() oder Format() Funktion finden.

Irgendwelche Ideen? Vielen Dank.

+6

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. –

Antwort

11

DateAdd ist eine alte VB6-Methode, die aus Gründen der Abwärtskompatibilität in VB.NET übernommen wurde. Sie könnten es auch in C# verwenden, wenn Sie den Namespace Microsoft.VisualBasic in Ihrem C# -Projekt enthalten, aber ich würde die Verwendung der Methode in C# oder VB.NET nicht empfehlen. Hier ist, wie Sie sollten es tun (es ist einfacher zu lesen):

tAvailableDate = DateTime.Now.AddDays(21); 
+0

Das funktioniert perfekt. Vielen Dank. Als Follow-up habe ich auch in einer SQL-Zeichenfolge (noch vb6) - Format (tAvailableDate, gDATEFORMAT) Für C# kann ich einfach das - tAvailableDate machen. ? –

+0

Um ein 'DateTime'-Objekt in einen String zu konvertieren, verwenden Sie die' ToString'-Methode, wie zum Beispiel: 'tAvailableDate.ToString (gDATEFORMAT)' –

+0

Okay. Danke für die Hilfe. –

10

Meine VB6 ist ein bisschen eingerostet, aber wenn ich mich erinnere, versuchen Sie 21 Tage hinzuzufügen. Also hier ist was Sie tun möchten:

tAvailableDate = DateTime.Now.AddDays(21); 

UPDATE

Sie erwähnten, dass Sie die Variable auf einen DateTime von einem string umgewandelt. Wenn Sie es wieder zu einem string erhalten müssen (was es sieht aus wie Sie aus einem anderen Kommentar könnte), dann möchten Sie anrufen:

tAvailableDate.ToString("[format string]"); 

Hilfe zur Formatierung der Zeichenfolge, wie Sie wollen, finden Sie unter: http://msdn.microsoft.com/en-us/library/az4se3k1.aspx

+2

+1. Ja, es macht keinen Sinn, mit Format in eine Zeichenkette zu konvertieren und dann Tage hinzuzufügen. Tage können zu Daten hinzugefügt werden, aber nicht zu Zeichenfolgen. Wahrscheinlich funktioniert es mit VB6, weil VB6 die Zeichenkette automatisch zurück in 'Date' konvertiert und somit diesen Fehler maskiert! Wenn es jedoch durch die Verwendung einer anderen Kultur als in 'gDATEFORMAT' angegeben konvertiert wird, kann dies zu einem Fehler führen (z. B. durch Umkehren von Tagen und Monaten). –

+0

Danke für Ihre Hilfe. Dieser Code hat perfekt funktioniert. Um das Format in VB6 beim Schreiben meines C# -Codes zu beseitigen, habe ich tAvailable Date als DateTime im Gegensatz zu einer Zeichenkette deklariert. –

+0

Als Follow-up habe ich auch in einer SQL-Zeichenfolge (noch vb6) - Format (tAvailableDate, gDATEFORMAT) Für C# kann ich einfach das - tAvailableDate machen. ? –

0

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.