he pensado sobre su problema y hay un aspecto que me perdí ayer. Pensé que la función Format
no tenía sentido, pero, aunque parezca extraña, puede tener sentido. Dejame explicar.
En VB6 que tienen
tAvailableDate = DateAdd("d", 21, Format(Now, gDATEFORMAT))
¿Por qué parece extraño (o incluso mal)? Now
es un Date
. Format
convierte esta fecha a String
(bueno a Variant
que contiene un String
para ser precisos), pero DateAdd
necesita un parámetro Date
para poder agregar días. DateAdd
se declara así:
Function DateAdd(Interval As String, Number As Double, Date)
En lugar de dar una advertencia o un error del compilador, VB6 convierte en silencio esta cadena de nuevo a un Date
y lo pasa al DateAdd
. Así que mi primera suposición fue simplemente dejar caer este Format
.
PERO este Format
puede tener un efecto deseado en el resultado, dependiendo de cómo se defina gDATEFORMAT
. Si gDATEFORMAT
contiene solo una parte de fecha, la función de formateo ¡soltará la parte de tiempo!Sin embargo, esto simplemente podría lograrse mediante el uso de la función Date
en lugar de utilizar la función de Now
en VB6
tAvailableDate = DateAdd("d", 21, Date)
o DateTime.Today
en .NET (C# o VB.NET).
Pero gDATEFORMAT
solo puede contener mes y año. VB6 (usando mi localidad suiza):
Date ==> 27.06.2012
Format(Date,"MM.yyyy") ==> "06.2012"
CDate(Format(Date,"MM.yyyy")) ==> 01.06.2012
Como se puede ver, el formato de la fecha tendría el efecto de devolver el primer día del mes en curso en este caso. Al agregar 21 días, siempre obtendría el día 22 del mes actual. ¡Esto es bastante diferente a agregar 21 días a la fecha actual! En C# que podría lograr lo mismo con
DateTime today = DateTime.Today;
tAvailableDate = new DateTime(today.Year, today.Month, 22);
el fin de decidir cuál es el enfoque correcto, debe sabe lo gDATEFORMAT
contiene o, si es variable, formatear la fecha y luego analizar la cadena resultante para obtener una fecha de nuevo.
¿Qué estás tratando de lograr? Si pudieras decirnos eso, solo necesitarías personas que conocen .NET, no personas que conocen .NET * y * VB6. –