2012-06-26 19 views
6

tengo el siguiente código en VB -conversión de DateAdd y el código de formato de VB6 a C#

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

que estoy tratando de convertir esto en C#.

He convertido esto hasta ahora -

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

Pero no puedo encontrar un reemplazo para la función DateAdd() o Format().

¿Alguna idea? Gracias.

+6

¿Qué estás tratando de lograr? Si pudieras decirnos eso, solo necesitarías personas que conocen .NET, no personas que conocen .NET * y * VB6. –

Respuesta

11

DateAdd es un viejo método VB6 que se transfirió a VB.NET para compatibilidad con versiones anteriores. También podría hacer que funcione en C# si incluyó el espacio de nombre Microsoft.VisualBasic en su proyecto C#, pero no recomendaría usar el método en C# o VB.NET. Así es como se debe hacerlo (es más fácil de leer también):

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

Eso funciona perfectamente. Gracias. Como seguimiento, también tengo en una cadena SQL (todavía vb6) - Formato (tDiazonable, gDATEFORMAT) Para C#, simplemente puedo hacer eso - tDisponible. ? –

+0

Para convertir un objeto 'DateTime' en una cadena, use el método' ToString', como: 'tAvailableDate.ToString (gDATEFORMAT)' –

+0

Bien. Gracias por la ayuda. –

10

Mi VB6 está un poco oxidado, pero si mal no recuerdo, está tratando de agregar 21 días. Así que esto es lo que desea hacer:

tAvailableDate = DateTime.Now.AddDays(21); 

ACTUALIZACIÓN

Usted ha mencionado que ha convertido la variable a un DateTime de un string. Si usted necesita para obtener de nuevo a un string (que parece que podría de otro comentario), y luego al que desea llamar:

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

Para obtener ayuda sobre cómo formatear la cadena de la manera deseada, ver: http://msdn.microsoft.com/en-us/library/az4se3k1.aspx

+2

+1. Sí, no tiene sentido convertir a cadena con Formato y luego intentar agregar días. Los días pueden agregarse a fechas pero no a cadenas. Probablemente funcione con VB6, porque VB6 convierte automáticamente la cadena a 'Fecha' y así enmascara este error. Pero si lo vuelve a convertir utilizando otra cultura distinta de la especificada en 'gDATEFORMAT', podría generar un error (invirtiendo días y meses, por ejemplo). –

+0

Gracias por su ayuda. Ese código funcionó perfectamente. Para eliminar el Formato en VB6 al escribir mi código C#, declare t Fecha disponible como DateTime en lugar de una cadena. –

+0

Como seguimiento también tengo en una cadena de SQL (todavía vb6) - Formato (tDiazonable, gDATEFORMAT) Para C# puedo simplemente hacer eso - tDatos disponibles. ? –

0

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.

Cuestiones relacionadas