años,meses,dias

03/06/2006 - 22:06 por Jose | Informe spam
Existe alguna funcion en vb.net 2003 que muestre los años,meses y dias
transcurridos entre dos fechas?

Gracias de antemano.

Preguntas similare

Leer las respuestas

#6 Leonardo Azpurua [mvp vb]
05/06/2006 - 07:39 | Informe spam
"Eduardo Alvarado Meza" <ealvarado_15@(eliminarestetexto)hotmail.com>
escribió en el mensaje news:
Habria que revisar eso.. de que el espacio de nombres visualbasic solo
existe por compatibilidad, me parece que aparte de la sintaxis, vb es vb
por esa biblioteca, es como la funcion val, no hay otra como esa, le metes
un cadena y arroja cero, le metes 5r y arroja 5, es perfecta.



Hola, Eduardo:

En realidad, todos los lenguajes .NET acaban dependiendo de la FCL (libreria
de clases del framework).

El espacio de nombres Microsoft.VisualBasic es una capa adicional agregada a
VB.NET para soportar algunas funciones de uso frecuente en VB6 que no
pasaron directamente a la FCL.

Puedes crear un equivalente funcional exacto de Val asi:

Private Function Val(ByVal s As String) As Double
Dim r As New System.Text.RegularExpressions.Regex("\d*\.{0,1}\d*")
Dim m As System.Text.RegularExpressions.Match = r.Match(s)
If m Is Nothing OrElse m.ToString = "" Then Return 0
Return Double.Parse(m.ToString.Replace(".",
System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator))
End Function

Puede que la implementacion de Val en Microsoft.VisualBasic este mas
optimizada. Pero al final, todo lo que podemos hacer con ese espacio de
nombres puede hacerse igualmente con la FCL, y todo lo que esta implementado
en él se concreta en una serie de llamadas a la FCL. Microsoft.VisualBasic
no es mas que un intermediario: no hay nada de malo en usarlo, pero por lo
general es mejor utilizar los recursos "nativos" de .NET.


Salud!
Respuesta Responder a este mensaje
#7 SoftJaén
05/06/2006 - 11:12 | Informe spam
"Eduardo Alvarado Meza" escribió:

Habria que revisar eso.. de que el espacio de nombres visualbasic solo
existe por compatibilidad, me parece que aparte de la sintaxis, vb es vb
por esa biblioteca, es como la funcion val, no hay otra como esa, le
metes un cadena y arroja cero, le metes 5r y arroja 5, es perfecta.




Hola, Eduardo:

Si hablamos de revisar, lo mismo no acabaríamos de revisar conceptos. :-)

Desde que instalé la primera versión de Visual Basic .net, rápidamente me dí
cuenta que la nueva herramienta de programación, nada tenía que ver con mi
querido Visual Basic 6.0. Lo primero que hice fue intentar "migrar" una
sencilla aplicación desarrollada con VB 6.0. Todavía me acuerdo de la clara
de "gili..." que se me quedó, cuando observé el editor de código llenó de
rayas onduladas azules. Parecía que estaba trabajando con Microsoft Word, y
que tenía activada la corrección ortográfica. Hasta que procuré quitar todos
los errores, pasaron unas pocas horas. :-(

Con ello te quiero decir, que en mi humilde opinión, .net representaba un
mundo diferente al que hasta entonces estaba acostumbrado a manejar, y fue
como empezar de nuevo. Al principio, seguía utilizando en mis soluciones,
las funciones propias de Visual Basic, pero conforme iba avanzando en el
estudio, y conociendo más a fondo las clases incluidas en el marco de
trabajo de .net, me iba olvidando de las antiguas funciones, hasta tal
punto, que hoy en día, apenas las utilizo. ¡Cuanto hubiera dado para que
Visual Basic 6.0 se pareciera en algo al maravilloso mundo que acababa de
conocer! Ahora es cuando me doy cuenta de las horas "desperdiciadas"
peleándome con la API de Win32.

Salvo que alguien me de unas explicaciones convincentes, sigo pensando que
el espacio de nombres Microsoft.Visual Basic existe por compatibilidad con
las versiones anteriores del lenguaje. Pero como indiqué en mi anterior
mensaje, más que por compatibilidad, entiendo que la incluyeron, mejorando
algún que otro procedimiento, para ayudarle a los usuarios a "migrar" sus
aplicaciones que ya tenían escritas. Pero llegado a éste punto es donde
entiendo que está la equivocación, de ahí que siempre encierre entre
comillas las palabras "convertir", "migrar", "actualizar", u otras que
tengan más o menos el mismo significado.

Según mi opinión, .net se creó para el desarrollo de nuevas aplicaciones,
pero no para "actualizar" las ya existentes. Al que me lo ha preguntado,
siempre le he respondido lo mismo: es más fácil crear una aplicación con
.net, que "migrar" una ya existente escrita con VB 6.0. Y cuanto más tiempo
tarde alguien en adaptarse a las clases del espacio de nombres System, más
trabajo le costará el día de mañana "subirse al carro de .net".

Para aquellos que me conocen del grupo de noticias en español de Visual
Basic, sabrán la lucha diaria que tengo porque la gente deje de utilizar la
obsoleta biblioteca de DAO. Pues la misma lucha se puede trasladar aquí,
para hacerle ver a los desarrolladores de Visual Basic .net, las ventajas
que tiene el utilizar las clases del espacio de nombres System, porque para
mí, hoy en día no tiene ningún sentido seguir utilizando las funciones de
Visual Basic de toda la vida, aunque haya funciones como «DateDiff» o «Val»
que hagan bien su trabajo, porque como ha comentado el amigo Leonardo, casi
todo (por no decir todo) se puede implementar con .net. El hecho que no
existan funciones para totalizar el número de meses o de años, no puede
justificar el utilizar las clases existentes en el espacio de nombres
Microsoft.Visual Basic.

Es igual que ocurría con Visual Basic clásico. Cuando no se podía hacer algo
con las funciones propias del lenguaje, era misión del desarrollador el
crearlas. Pues digamos que con .net ocurre un tanto de lo mismo: si no
existe una función, hay que crearla. :-)


Un saludo

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
Respuesta Responder a este mensaje
#8 Jesús M.I
05/06/2006 - 15:56 | Informe spam
Create una consulta con Between y q te lo muestre por algun lado¡¡ :D

"Daniel A. Calvin" escribió:

Hola Enrique

Quiero hacer un cometario sobre tu propuesta de utilizar subtract.

El resultado de dicha operación es válido para días. horas, minutos, etc.
Pero no para meses, años

Ej.:
DateTime Day01 = new DateTime(2004, 02, 01);
DateTime Day02 = new DateTime(2004, 03, 01);
DateTime Day03 = new DateTime(2004, 03, 01);
DateTime Day04 = new DateTime(2004, 04, 01);
TimeSpan Dif01 = Day02.Subtract(Day01);
TimeSpan Dif02 = Day04.Subtract(Day03);

Console.WriteLine("Primer caso: {0} menos {1}", Day02, Day01);
Console.WriteLine("\tDiferencia {0}", Dif01.TotalDays);

Console.WriteLine("Segundo caso: {0} menos {1}", Day04, Day03);
Console.WriteLine("\tDiferencia {0}", Dif02.TotalDays);

La salida de esto da:

Primer caso: 01/03/2004 12:00:00 a.m. menos 01/02/2004 12:00:00 a.m.
Diferencia 29

Segundo caso: 01/04/2004 12:00:00 a.m. menos 01/03/2004 12:00:00 a.m.
Diferencia 31

Pero en meses esto es 1 mes, independientemente de la cantidad de dias, no
importa si es febrero o marzo.

La función de vb.net datediff nos da esa diferencia en forma correcta,
conserva el contexto de calendario y si bien en un caso son 29 días y en el
otro 31, expresado en meses es UN MES.

Esa es la diferencia fundamental entre los dos metodos.

Daniel Calvin
MCP






"SoftJaén" escribió en el mensaje
news:%
> "Jose" preguntó:
>
>> Existe alguna funcion en vb.net 2003 que muestre los años,meses y dias
>> transcurridos entre dos fechas?
>
> Otra alternativa a la función «DateDiff» de Visual Basic, es utilizar los
> métodos que nos proporciona la estructura «DateTime» del marco de trabajo
> de .net, en concreto, el método «Subtract», si tu intención es restar
> fechas, el cual te devuelve un objeto «TimeSpan».
>
> Consulta en la ayuda de Visual Basic .net el método «Subtract», donde
> encontrarás un ejemplo para restar fechas.
>
> Enrique Martínez
> [MS MVP - VB]
>
> Nota informativa: La información contenida en este mensaje, así como el
> código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
> garantías de ninguna clase, y no otorga derecho alguno. Usted asume
> cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado
> o sugerido en el presente mensaje.
>



Respuesta Responder a este mensaje
#9 Eduardo Alvarado Meza
06/06/2006 - 06:36 | Informe spam
Bueno que puedo decir, ustedes me convencen facil... :-) , ambos lo han
expuesto apropiadamente, yo tambien evito usar ese espacio de nombres,
realmente la unica que ocupo es el val.

Gracias a ambos por responder.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida