none
¿Cómo convertir campo DateTime en Date yyyy/MM/dd? RRS feed

  • Pregunta

  • Hola a todos, ¿de qué manera puedo convertir un campo DateTime, por ejemplo: 2018/09/24 00:00:00 en 2018/09/24? yo intento lo siguiente:

    string stFechaDesde = Convert.ToDateTime(txtFechaDesde.Text).ToShortDateString().ToString("yyyy/MM/dd");

    De esta manera, me marca la parte "yyyy/MM/dd" y me dice:

    Argumento 1: no se puede convertir de string a 'System.IFormatProvider'

    Agradezco su atencion! Saludos



    • Editado AguFortini lunes, 24 de septiembre de 2018 20:14
    lunes, 24 de septiembre de 2018 19:11

Respuestas

  • Hola! gracias por tu respuesta, el problema esta, que tengo que filtrar una lista con esa fecha, y el campo es del tipo Date:

    Session["lstReclamo"] = lstReclamo.FindAll(x => x.rec_fechaAlta >= stFechaDesde);
    En este caso me da error, y no puedo convertirlo a DateTime nuevamente porque me tomaría de nuevo hh:mm:ss.. ¿cómo puedo hacer? Gracias y saludos

    lunes, 24 de septiembre de 2018 21:58
  •  Buenas,

    En c# no existe el tipo de dato Date como tal, es algo que se usa en bases de datos, supongo que para ahorrar espacio al no almacenar los datos de la hora al no ser necesarios.

    C# te da algo "parecido", ya que si miras un datetime, verás que tiene una propiedad Date, que simplemente te da otro datetime  con la hora en 00.00.00.

    Esto te permite comparar dos datetime por fecha, al hacer que sus horas sean la misma, ya que sino, dos datetime del mismo día y distinta hora serían distintos.

    Si en la base de datos tienes en date, no hay problema, tu aplicación tendrá datetime, pero tu que lo sabes, trabajas con la propiedad Date de los datetime, por ejemplo, si quieres compararlos con hoy, podrías hacerlo asi:

    var hoy = MiListaDatetime.Where(x=>x.Date == DateTime.Now.Date);

    Y si, si puedes elegir trabajar con Datetime o string, es mejor que trabajes con Datetime, ya que son datos independientes del formato. 

    Atte


    Jorge Turrado Ferrero

    Mis repositorios en GitHub
    Ranking GitHub Euskadi
    Ranking GitHub Alava

    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.


    • Editado Jorge TurradoMVP viernes, 28 de septiembre de 2018 17:50
    • Propuesto como respuesta Blueh Scouth viernes, 28 de septiembre de 2018 19:28
    • Marcado como respuesta AguFortini sábado, 29 de septiembre de 2018 16:41
    viernes, 28 de septiembre de 2018 17:46
  • hola

    >>lstReclamo es una vista.. con que te referis a llevar?

    una vista? si usas linq no sera una lista?

    con llevar hago referencia a que conviertas el tipo de datos llevando todo a datetime

    >>si en vez de hacer eso, directamente modifico el campo a tipo DateTime?

    eso seria mejor

    >>que diferencia habría entre Date y DateTime, ademas de añadido el horario?

    no se de donde sale ese Date, ya que no existe como tipo de dato en c#

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 28 de septiembre de 2018 15:49

Todas las respuestas

  • Podrías Usar:

    string fecha = string.Format("{0:yyyy/MM/dd}",DateTime.Now);


    lunes, 24 de septiembre de 2018 21:51
  • Hola! gracias por tu respuesta, el problema esta, que tengo que filtrar una lista con esa fecha, y el campo es del tipo Date:

    Session["lstReclamo"] = lstReclamo.FindAll(x => x.rec_fechaAlta >= stFechaDesde);
    En este caso me da error, y no puedo convertirlo a DateTime nuevamente porque me tomaría de nuevo hh:mm:ss.. ¿cómo puedo hacer? Gracias y saludos

    lunes, 24 de septiembre de 2018 21:58
  • hola

    >>el problema esta, que tengo que filtrar una lista con esa fecha, y el campo es del tipo Date

    pero entonces porqu no usas el datetime simple sin tener que pasarlo a string, como es que estas aplicando el filtro a la lista? usas linq? o es una query sql?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    lunes, 24 de septiembre de 2018 22:01
  • Algo Así?

    Session["lstReclamo"] = lstReclamo.FindAll(x => string.Format("{0:yyyy/MM/dd}",x.rec_fechaAlta)>= string.Format("{0:yyyy/MM/dd}",stFechaDesde));

    Me comentas.


    • Editado Blueh Scouth lunes, 24 de septiembre de 2018 22:09
    lunes, 24 de septiembre de 2018 22:08
  • Hola Leandro, pq en la base de datos lo almaceno como tipo Date, no DateTime. Y si, estoy implementando linq. Te dejo algo de código: 

     if (lstReclamo == null)
                {
                    webService = new WebServiceDC();
                    Session["lstReclamo"] = webService.SelectReclamo("rec_fechaAlta <= '" + Convert.ToDateTime(txtFechaDesde.Text).ToString("yyyy/MM/dd") + "'");
    
                    jsSer = new JavaScriptSerializer();
                    Session["lstReclamo"] = jsSer.Deserialize<List<v_ConsultarReclamo>>(Session["lstReclamo"].ToString());
                }

            [OperationContract]
            [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
            public string SelectReclamo(string stFiltro = "")
            {
                try
                {
                    clsReclamo objClsReclamo = new clsReclamo();
                    var objConsultaReclamo = objClsReclamo.SelectReclamo(stFiltro);
    
                    JavaScriptSerializer jsSer = new JavaScriptSerializer();
                    return jsSer.Serialize(objConsultaReclamo);
                }
                catch (Exception ex)
                {
                    return ex.ToString();
                }
            }
    
            public List<v_ConsultarReclamo> SelectReclamo(string stFiltro = "")
            {
                try
                {
                    using (BDGestionReclamosEntities BD = new BDGestionReclamosEntities())
                    {
                        string stSQL = "select * " +
                                       "from v_ConsultarReclamo " +
                                        ((stFiltro.Length > 0) ?
                                        " where " + stFiltro : "") +
                                        " order by rec_fechaAlta desc";
    
                        return BD.Database.SqlQuery<v_ConsultarReclamo>(stSQL).ToList<v_ConsultarReclamo>();
                    }
                }
                catch (Exception ex)
                {
                    return null;
                }
            }
    

    Pero si lstReclamo no fuera null:

    Session["lstReclamo"] = lstReclamo.FindAll(x => x.rec_fechaAlta <= Convert.ToDateTime(txtFechaHasta.Text));
     

    Si tomaras como ejemplo Fecha Desde: 20/09 y Fecha Hasta: 24/09, el filtro quedaría:

    rec_fechaAlta >= '2018/09/20' and rec_fechaAlta <= '2018/09/24 00:00:00' 

    Y alli me devuelve lstReclamo.Count en 0, si no tuviera 00:00:00, que ya probe con datos fijos me devuelve bien..

    Saludos









    • Editado AguFortini lunes, 24 de septiembre de 2018 22:23
    lunes, 24 de septiembre de 2018 22:15
  • de que tipo es lstReclamo?

    porque no llevas las fechas a datetime en lugar de string

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 24 de septiembre de 2018 22:30
  • lstReclamo es una vista.. con que te referis a llevar? digamos en vez de implementar el filtro string, hacerlo datetime? Y si en vez de hacer eso, directamente modifico el campo a tipo DateTime? que diferencia habría entre Date y DateTime, ademas de añadido el horario?
    • Editado AguFortini lunes, 24 de septiembre de 2018 22:47
    lunes, 24 de septiembre de 2018 22:40
  • hola

    >>lstReclamo es una vista.. con que te referis a llevar?

    una vista? si usas linq no sera una lista?

    con llevar hago referencia a que conviertas el tipo de datos llevando todo a datetime

    >>si en vez de hacer eso, directamente modifico el campo a tipo DateTime?

    eso seria mejor

    >>que diferencia habría entre Date y DateTime, ademas de añadido el horario?

    no se de donde sale ese Date, ya que no existe como tipo de dato en c#

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 28 de septiembre de 2018 15:49
  •  Buenas,

    En c# no existe el tipo de dato Date como tal, es algo que se usa en bases de datos, supongo que para ahorrar espacio al no almacenar los datos de la hora al no ser necesarios.

    C# te da algo "parecido", ya que si miras un datetime, verás que tiene una propiedad Date, que simplemente te da otro datetime  con la hora en 00.00.00.

    Esto te permite comparar dos datetime por fecha, al hacer que sus horas sean la misma, ya que sino, dos datetime del mismo día y distinta hora serían distintos.

    Si en la base de datos tienes en date, no hay problema, tu aplicación tendrá datetime, pero tu que lo sabes, trabajas con la propiedad Date de los datetime, por ejemplo, si quieres compararlos con hoy, podrías hacerlo asi:

    var hoy = MiListaDatetime.Where(x=>x.Date == DateTime.Now.Date);

    Y si, si puedes elegir trabajar con Datetime o string, es mejor que trabajes con Datetime, ya que son datos independientes del formato. 

    Atte


    Jorge Turrado Ferrero

    Mis repositorios en GitHub
    Ranking GitHub Euskadi
    Ranking GitHub Alava

    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.


    • Editado Jorge TurradoMVP viernes, 28 de septiembre de 2018 17:50
    • Propuesto como respuesta Blueh Scouth viernes, 28 de septiembre de 2018 19:28
    • Marcado como respuesta AguFortini sábado, 29 de septiembre de 2018 16:41
    viernes, 28 de septiembre de 2018 17:46