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.
Cosa stai cercando di ottenere? Se potessi dircelo, ti servirebbero solo persone che conoscono .NET, non persone che conoscono .NET * e * VB6. –