none
Cambiar formato fecha sin convertirlo a String RRS feed

  • Pregunta

  • El principal problema es que el formato "mm-dd-yyyy" que viene default en el tipo de dato Date no me sirve, necesito el formato "yyyy-mm-dd" pero sin convertirlo a un tipo de dato String, ya que utilizaré la fecha en un parametro para un procedimiento almacenado.

    ¿Se puede cambiar de alguna forma el formato "mm-dd-yyyy" a "yyyy-mm-dd"  en una variable de tipo Date? 

    viernes, 30 de marzo de 2018 7:58

Respuestas

  • Tienes un error al decir que el tipo Date tiene un formato por default. El tipo Date NO TIENE FORMATO. Solo guarda los datos en binario (internamente son Integers para número de día, número de mes y número de año).

    Cuando "haces algo" con el Date, convirtiéndolo a String, ese proceso de "convertir a string" es el que aplica un formato, y el formato que aplica no lo toma del Date (que no lo almacena), sino de algún otro sitio, tal como el CurrentCulture del CurrentThread cuando es una conversión implícita. Cuando decimos "convertir a String", recuerda que hay muchos sitios donde se convierte automáticamente aunque tú no hayas escrito ninguna función de conversión. Por ejemplo si CONCATENAS un Date con un String (para formar una sentencia SQL), ese operador de concatenación automáticamente resulta en una conversión a String cuando se compila el programa.

    La solución consiste en no dejar que el sistema aplique las conversiones implícitas, sino escribir expresamente la operación de conversión, indicando el formato. Por ejemplo:

    Dim d as Date=.... : Dim s as string = "select... where Fecha = '" & d.ToString("yyyy-MM-dd") & "'"

    PERO: Si es para un parámetro de un procedimiento almacenado, NO HAGAS LA CONVERSIÓN. Declara correctamente el parámetro indicando que es de tipo DateTime, y asígnale directamente el valor del Date sin convertirlo a string. Cuando trabajas de esta manera, los drivers de base de datos ya saben generar la sentencia con el formato correcto, sin que tengas que indicarlo en ningún sitio.

    • Propuesto como respuesta Jorge TurradoMVP viernes, 30 de marzo de 2018 13:43
    • Marcado como respuesta Pablo Rubio domingo, 1 de abril de 2018 0:04
    viernes, 30 de marzo de 2018 11:37