2012-06-26 23 views
6

Ho il seguente codice in VB -Conversione DateAdd e il codice formato da VB6 a C#

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

Sto tentando di convertire questo in C#.

Ho convertito questo finora -

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

Ma non riesco a trovare un sostituto per la funzione DateAdd() o Format().

Qualche idea? Grazie.

+6

Cosa stai cercando di ottenere? Se potessi dircelo, ti servirebbero solo persone che conoscono .NET, non persone che conoscono .NET * e * VB6. –

risposta

11

DateAdd è un vecchio metodo VB6 che è stato trasferito in VB.NET per compatibilità con le versioni precedenti. Puoi farlo funzionare anche in C# se hai incluso lo spazio dei nomi Microsoft.VisualBasic nel tuo progetto C#, ma non ti consiglio di usare il metodo in C# o VB.NET. Ecco come si dovrebbe fare è (è più facile da leggere troppo):

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

Che funziona perfettamente. Grazie. Come follow-up ho anche una stringa SQL (ancora vb6) - Format (tAvailableDate, gDATEFORMAT) Per C# posso semplicemente farlo - tAvailableDate. ? –

+0

Per convertire un oggetto 'DateTime' in una stringa, utilizzare il metodo' ToString', ad esempio: 'tAvailableDate.ToString (gDATEFORMAT)' –

+0

Ok. Grazie per l'aiuto. –

10

Il mio VB6 è un po 'arrugginito, ma se ricordo, stai cercando di aggiungere 21 giorni. Quindi, ecco cosa si vuole fare:

tAvailableDate = DateTime.Now.AddDays(21); 

UPDATE

Lei ha detto che è stato convertito la variabile ad un DateTime da un string. Se avete bisogno di ottenere di nuovo ad un string (che sembra che si potrebbe da un altro commento), poi si desidera chiamare:

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

Per informazioni sulla formattazione stringa nel modo desiderato, si veda: http://msdn.microsoft.com/en-us/library/az4se3k1.aspx

+2

+1. Sì, non ha senso convertire in stringa con Format e quindi provare ad aggiungere giorni. I giorni possono essere aggiunti alle date ma non alle stringhe. Probabilmente funziona con VB6, perché VB6 converte automaticamente la stringa in 'Date' e quindi maschera questo errore! Ma se lo converte indietro usando una cultura diversa da quella specificata in 'gDATEFORMAT', potrebbe produrre un errore (invertendo per esempio giorni e mesi). –

+0

Grazie per il vostro aiuto. Quel codice ha funzionato perfettamente. Per eliminare il formato in VB6 durante la scrittura del mio codice C# ho dichiarato la data tAvailable come DateTime in contrapposizione a una stringa. –

+0

Come follow-up ho anche una stringa SQL (ancora vb6) - Format (tAvailableDate, gDATEFORMAT) Per C# posso semplicemente farlo - tAvailableDate. ? –

0

ho pensato sopra il vostro problema e c'è un aspetto che ho perso ieri. Ho pensato che la funzione Format non avesse senso, ma, anche se sembra strano, può avere senso. Lasciatemi spiegare.

In VB6 abbiamo

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

Perché sembra strano (o addirittura sbagliato)? Now è un Date. Format converte questa data in String (bene in uno Variant contenente un String per la precisione), ma DateAdd ha bisogno di un parametro Date per poter aggiungere giorni. DateAdd è dichiarata in questo modo:

Function DateAdd(Interval As String, Number As Double, Date) 

Invece di dare un avvertimento o un errore di compilazione, VB6 converte in silenzio questa stringa di nuovo ad un Date e lo passa al DateAdd. Quindi la mia prima ipotesi è stata quella di abbandonare questo Format.

MA questo Format può avere un effetto desiderato sul risultato, a seconda di come è definito gDATEFORMAT. Se gDATEFORMAT contiene solo una parte di data, la funzione di formattazione farà cadere la parte di tempo!Tuttavia questo potrebbe semplicemente essere ottenuto utilizzando la funzione Date invece di utilizzare la funzione Now in VB6

tAvailableDate = DateAdd("d", 21, Date) 

o DateTime.Today NET (C# o VB.NET).

Ma gDATEFORMAT poteva contenere solo mese e anno. VB6 (usando il mio locale svizzera):

Date ==> 27.06.2012 
Format(Date,"MM.yyyy") ==> "06.2012" 
CDate(Format(Date,"MM.yyyy")) ==> 01.06.2012 

Come si può vedere, la formattazione della data avrebbe l'effetto di restituire il primo giorno del mese in corso, in questo caso. Aggiungendo 21 giorni si ottiene sempre il 22 ° del mese corrente. Questo è molto diverso dall'aggiunta di 21 giorni alla data corrente! In C# si potrebbe ottenere lo stesso con

DateTime today = DateTime.Today; 
tAvailableDate = new DateTime(today.Year, today.Month, 22); 

Al fine di decidere quale approccio è corretto, è necessario sapere che cosa gDATEFORMAT contiene o, se questo è variabile, formattare la data e quindi analizzare la stringa risultante per ottenere un data di nuovo.