none
pasar a una variable solamente la fecha válida RRS feed

  • Pregunta

  • Hola,

    mi caso es que tengo un campo que es datetime y a partir de el quiero calcular el tiempo  transcurrido  a través del Datediff(......)

    Quiero recoger la fecha que esta en un texbox:

                      dim  fecha as Datetime

                      fecha = CDate(txtdatanaixement.Text)

    el caso es que me devuelve:  #12:00:00 AM#

    y a partir de aquí ya no puedo hacer nada con este valor.

    en el xaml lo tengo declarado:

       <TextBox Name="txtdatanaixement"  Text="{Binding Path=data_naixement, Mode=TwoWay, StringFormat='dd/MM/yyyy'}" Grid.Row="4" Grid.Column="1"></TextBox>
    
    Hay alguna manera de leer solamente lo que me muestra el texbox:dia/mes/año?

    Gracias

     

     

    martes, 21 de septiembre de 2010 10:26

Respuestas

  • ¡Hola!

     

    Una cosa de la que me he dado cuenta. No haces validación en el texto que le pasas. Pon un if isdate.... antes de CDate(txtdatanaixement.Text)

    ¿Te deja hacer un Isdate( txtdatanaixement.Text)?

    Saludos.

    • Marcado como respuesta Spandau sábado, 2 de octubre de 2010 0:16
    miércoles, 22 de septiembre de 2010 9:57

Todas las respuestas

  • ¡Hola!

     

    ¿Puedes hacerme una prueba?. Si cambias  StringFormat='dd/MM/yyyy'}"  a  StringFormat='yyyy/MM/dd'}",  ¿Sigue devolviendote   #12:00:00 AM#?.

     

    Saludos,

    martes, 21 de septiembre de 2010 13:10
  • Hola Spandau.

    No se si haces uso de esa funcion para obtener la fecha por algun motivo en concreto, pero en .net existen objetos especificos para trabajar con fechas de forma optima, estos son DateTime y TimeSpan.

    de modo que para obtener una fecha puedes hacer:

     

    DateTime date2 = DateTime.Parse(txtdatanaixement.Text);
    // obtener fecha para un tipo de cultura especifico (en el ejemplo frances)
    DateTime date2 = DateTime.Parse(txtdatanaixement.Text, new System.Globalization.CultureInfo("fr-FR", true));
    

     

    De este modo obtienes la fecha en un objeto DateTime que contiene funciones y propiedades para fechas.

    Luego si quieres ver diferencias entre tiempo puedes hacer uso de TimeSpan para ver el intervalo en todas las medidas de tiempo posibles, incluso ticks.

    algo asi:

     

    DateTime date1 = DateTime.Now;
    DateTime date2 = DateTime.Parse(txtdatanaixement.Text);
    TimeSpan dateDiff = new TimeSpan(date1.Ticks - date2.Ticks);
    string diff = dateDiff.ToString();
    

     

    y en el string tendras la diferencia de tiempo, que puede obtenerse en dias, horas, minutos, etc.

    (Siento la escritura en c#, se me da mejor)

     


    Saludos
    David González
    MCP.
    Visita mi Blog en: http://www.dgzornoza.com/
    • Propuesto como respuesta iRodfraga miércoles, 22 de septiembre de 2010 4:13
    martes, 21 de septiembre de 2010 15:23
  • ¡Hola David!

    No sientas nada que asi aprendemos ;-). Puede emplear el parse (convert) o hacerlo como él lo hace con el CDate. CDate, CInt, CDbl,... son funciones heredadas de VB antes de la existencia de .Net.

    Por ello, le preguntaba, ¿qué pasa si cambia el formato?. Creo que el problema lo tiene en la cultura que emplea pero antes de aventurarme quise que me lo confirmara.

    Un abrazo campeón.

     

    P.D.: Creo que le respondiste a una cuestión parecida a Spandau sobre fechas en el foro
    martes, 21 de septiembre de 2010 15:43
  • Que tal Corsario.

    No me suena haber usado nunca esa funcion, pero si no se puede especificar la cultura en la funcion existe un problema.

    De todas formas ahora que ha salido el tema aprobecho para decir que yo me acostumbraria a hacer uso de las funciones de .NET, no por nada, si no por que es posible que en proximas revisiones de VB.NET es posible que vayan quitando funcionalidades de VB heredadas y a la larga se puede convertir en un problema.

    He realizado mantenimientos de ASP en VB y he tenido que modificar la mitad del codigo para adaptarlo a VB.NET, supongo que han mantenido mucha funcionalidad por compatibilidad pero poco a poco la iran quitando.

     


    Saludos
    David González
    MCP.
    Visita mi Blog en: http://www.dgzornoza.com/
    martes, 21 de septiembre de 2010 15:57
  • ¡Buenas!

    Antes de que se me olvide. ¿Recibiste mi correo?. Sólo por saber si te llegó.

    Estas no creo que las quiten (sólo son de conversión de datos). Llevan desde el inicio de .net con nosotros, pero si estoy de acuerdo contigo que deberíamos emplear las genéricas. Aunque siempre es más cómodo poner un CDate que un DateTime.Parse ;-) por el numero de letras aunque luego termines empleando el IDE y el tabulador ;-).

    Un abrazo,

     

    martes, 21 de septiembre de 2010 16:15
  • hola de nuevo.

    Si que recibi el correo, ya no me acordaba menos mal que me lo has comentado por que tengo cola de mesajes ;).

     

    Se me olvido comentar, ya que estamos, que existe una clase Convert que convierte todo tipo de objetos, que tambien suele usarse del mismo modo como por ejemplo:

    Convert.ToDateTime() (aunque tiene las mismas letras, jejeje).

     

    Lo comento por que es de interes saber que si se mira la funcion Convert.ToDateTime, se puede observar que que implementa un codigo como este:

    public static DateTime ToDateTime(string value)
    {
      if (value == null)
      {
        return new DateTime(0L);
      }
      return DateTime.Parse(value, CultureInfo.CurrentCulture);
    }
    
    

    De modo que se puede apreciar la diferencia entre ambos metodos, la clase Convert hace uso de la funcion Parse() especifica de cada estructura (DateTime es una estructura del mismo modo que Int32, Double, Byte, Char, etc.).

    La unica diferencia es que mediante Convert, se comprueba si el valor pasado es null para retornar una instancia, mientras que la funcion Parse, daria un error de conversion, aunque tambien se puede usar TryParse() dependiendo del caso.

     

     


    Saludos
    David González
    MCP.
    Visita mi Blog en: http://www.dgzornoza.com/
    martes, 21 de septiembre de 2010 17:56
  • ¡Hola!

     

    ¿Puedes hacerme una prueba?. Si cambias  StringFormat='dd/MM/yyyy'}"   a  StringFormat='yyyy/MM/dd'}",   ¿Sigue devolviendote   #12:00:00 AM#?.

     

    Saludos,


    Si, sin el StringFormat me escribe en el formato'yyy/MM/dd'.. y me devuelve este valor...( #12:00:00 AM#)

    Gracias

    martes, 21 de septiembre de 2010 23:28
  • Gracias David  y Corsario por vuestra informacion.. seguro que mañana  con vuestra ayuda me funciona..

    os inforaré

    Gracias a los 2

    martes, 21 de septiembre de 2010 23:30
  • ¡Hola!

     

    Una cosa de la que me he dado cuenta. No haces validación en el texto que le pasas. Pon un if isdate.... antes de CDate(txtdatanaixement.Text)

    ¿Te deja hacer un Isdate( txtdatanaixement.Text)?

    Saludos.

    • Marcado como respuesta Spandau sábado, 2 de octubre de 2010 0:16
    miércoles, 22 de septiembre de 2010 9:57