none
función para obtener mes y dia anterior RRS feed

  • Pregunta

  • como puedo obtener el mes + el año actual con alguna función de c# y el día anterior, pero evitando los domingos por ejemplo si hoy es lunes ayer fue domingo,pero mi día anterior debe decir sábado.
    lunes, 2 de mayo de 2016 16:11

Respuestas

  • palermo_software,

    El valor de la propiedad CurrentCulture lo determina la configuración regional del sistema operativo (Panel de control > Configuración regional), de modo que la aplicación se acomoda a los formatos de divisa, números, fecha, etc. del sistema operativo que ejecuta el equipo donde corre tu aplicación.

    En caso quieras forzar hacia una determinada cultura sin importar la configuración del sistema operativo entonces deberás establecerla antes de llamar al método InitializeComponent (del constructor del formulario)

    public Form1()
            {
                Thread.CurrentThread.CurrentCulture = new CultureInfo("es-ES");
                InitializeComponent();            
            }

    lunes, 9 de mayo de 2016 1:27

Todas las respuestas

  • Hola palermo_software,

    Puedes hacer lo siguiente:

    DateTime diaActual = DateTime.Today;
                DateTime diaAnterior = DateTime.Today.AddDays(-1).DayOfWeek == DayOfWeek.Sunday ? DateTime.Today.AddDays(-2) : DateTime.Today.AddDays(-1);
    
                MessageBox.Show(string.Format("Día actual {0} Día anterior {1}", diaActual.ToShortDateString(), diaAnterior.ToShortDateString()));

    lunes, 2 de mayo de 2016 16:18
  • Hola palermo_software,

    Puedes hacer lo siguiente:

    DateTime diaActual = DateTime.Today;
                DateTime diaAnterior = DateTime.Today.AddDays(-1).DayOfWeek == DayOfWeek.Sunday ? DateTime.Today.AddDays(-2) : DateTime.Today.AddDays(-1);
    
                MessageBox.Show(string.Format("Día actual {0} Día anterior {1}", diaActual.ToShortDateString(), diaAnterior.ToShortDateString()));

    yo necesito que salga el día lunes martes, etc
    lunes, 2 de mayo de 2016 17:23
  • palermo_software,

    De acuerdo, puedes hacer lo siguiente:

    DateTime diaAnterior = DateTime.Today.AddDays(-1).DayOfWeek == DayOfWeek.Sunday ? DateTime.Today.AddDays(-2) : DateTime.Today.AddDays(-1);
    
                var culture = new System.Globalization.CultureInfo("es-ES");
                
                MessageBox.Show(string.Format("Día anterior {0}", culture.DateTimeFormat.DayNames[(int)diaAnterior.DayOfWeek]));

    El tema de la cultura lo hago para que el día de la semana lo obtengas en el idioma castellano y no en inglés.

    lunes, 2 de mayo de 2016 17:35
  • tambíem me falta sacar el número del día.
    lunes, 2 de mayo de 2016 17:43
  • De acuerdo, aquí esta:

    DateTime diaAnterior = DateTime.Today.AddDays(-1).DayOfWeek == DayOfWeek.Sunday ? DateTime.Today.AddDays(-2) : DateTime.Today.AddDays(-1);
    
                var culture = new System.Globalization.CultureInfo("es-ES");
                
                MessageBox.Show(string.Format("Día anterior {0}. Dia {1}", culture.DateTimeFormat.DayNames[(int)diaAnterior.DayOfWeek], diaAnterior.Day));

    lunes, 2 de mayo de 2016 17:47
  • hola Williams una consulta mas 

    como puedo validar para poner lo que me indicas con un texto

    algo as+i como 

    ayer --> si ayer no fue domingo

    anteayer --> si ayer si fue domingo

    martes, 3 de mayo de 2016 1:33
  • palermo_software,

    Puedes hacer uso de una estructura de bifurcación como if o swith o simplemente utilizar el operador condicional ternario ?:, algo como lo siguiente:

    string diaAnteriorRelativo = DateTime.Today.AddDays(-1).DayOfWeek == DayOfWeek.Sunday ? "Antes de ayer" : "Ayer";
    
                MessageBox.Show(diaAnteriorRelativo);

    martes, 3 de mayo de 2016 3:06
  • palermo_software,

    Puedes hacer uso de una estructura de bifurcación como if o swith o simplemente utilizar el operador condicional ternario ?:, algo como lo siguiente:

    string diaAnteriorRelativo = DateTime.Today.AddDays(-1).DayOfWeek == DayOfWeek.Sunday ? "Antes de ayer" : "Ayer";
    
                MessageBox.Show(diaAnteriorRelativo);

     CultureInfo ci = new CultureInfo("Es-Es");
    
                DateTime fechaActual = DateTime.Today;
                lblVentaAcumuladaMesI.Text = "VENTA ACUMULADA" + " " + fechaActual.ToString("MMMM").ToUpper() + " " + fechaActual.Year;
                lblVentaAcumuladaMesD.Text = "VENTA ACUMULADA" + " " + fechaActual.ToString("MMMM").ToUpper() + " " + fechaActual.Year;
                DateTime diaAnterior = DateTime.Today.AddDays(-1).DayOfWeek == DayOfWeek.Sunday ? DateTime.Today.AddDays(-2) : DateTime.Today.AddDays(-1);
                string diaAnteriorRelativo = DateTime.Today.AddDays(-1).DayOfWeek == DayOfWeek.Sunday ? "VENTAS " : "VENTAS AYER";

    hola quiero saber si esta línea funciona en todas las confguraciones de idioma en pc como español españa , español latinoamerica

     fechaActual.ToString("MMMM").ToUpper()
    lunes, 9 de mayo de 2016 0:27
  • palermo_software,

    Si, considera que un formato de fecha con nombre o personalizado resulta de una instancia de fecha, por tanto el formato "MMMM" retornará en cualquier caso el nombre completo del mes sin importar el idioma. 

    Lo que si es cierto es que el idioma del nombre del mes depende de la referencia que se tenga de la cultura, es decir, podrías recibir Junio, June, Juin, Giugno, etc. Si quieres asegurar el nombre del mes en castellano entonces quizá requieras ser explicito en ello.

    fechaActual.ToString("MMMM", CultureInfo.CreateSpecificCulture("es-ES")).ToUpper()

    lunes, 9 de mayo de 2016 0:40
  • quedaria

                CultureInfo ci = new CultureInfo("Es-Es");
    
                DateTime fechaActual = DateTime.Today;
                lblVentaAcumuladaMesI.Text = "VENTA ACUMULADA" + " " + fechaActual.ToString("MMMM", CultureInfo.CreateSpecificCulture("es-ES")).ToUpper() + " " + fechaActual.Year;
                lblVentaAcumuladaMesD.Text = "VENTA ACUMULADA" + " " + fechaActual.ToString("MMMM", CultureInfo.CreateSpecificCulture("es-ES")).ToUpper() + " " + fechaActual.Year;
                DateTime diaAnterior = DateTime.Today.AddDays(-1).DayOfWeek == DayOfWeek.Sunday ? DateTime.Today.AddDays(-2) : DateTime.Today.AddDays(-1);
                string diaAnteriorRelativo = DateTime.Today.AddDays(-1).DayOfWeek == DayOfWeek.Sunday ? "VENTAS " : "VENTAS AYER";
                //string diaAnteriorRelativo = DateTime.Today.AddDays(-1).DayOfWeek == DayOfWeek.Sunday ? "Antes de ayer" : "Ayer";
    
                lblVentaAyerI.Text = diaAnteriorRelativo + " (" + Convert.ToString(ci.DateTimeFormat.GetDayName(diaAnterior.DayOfWeek)).ToUpper() + " " + diaAnterior.Day + ") ";

    lunes, 9 de mayo de 2016 1:17
  • palermo_software,

    Si, considera que un formato de fecha con nombre o personalizado resulta de una instancia de fecha, por tanto el formato "MMMM" retornará en cualquier caso el nombre completo del mes sin importar el idioma. 

    Lo que si es cierto es que el idioma del nombre del mes depende de la referencia que se tenga de la cultura, es decir, podrías recibir Junio, June, Juin, Giugno, etc. Si quieres asegurar el nombre del mes en castellano entonces quizá requieras ser explicito en ello.

    fechaActual.ToString("MMMM", CultureInfo.CreateSpecificCulture("es-ES")).ToUpper()

    donde esta la referencia de la cultura?
    lunes, 9 de mayo de 2016 1:17
  • palermo_software,

    El valor de la propiedad CurrentCulture lo determina la configuración regional del sistema operativo (Panel de control > Configuración regional), de modo que la aplicación se acomoda a los formatos de divisa, números, fecha, etc. del sistema operativo que ejecuta el equipo donde corre tu aplicación.

    En caso quieras forzar hacia una determinada cultura sin importar la configuración del sistema operativo entonces deberás establecerla antes de llamar al método InitializeComponent (del constructor del formulario)

    public Form1()
            {
                Thread.CurrentThread.CurrentCulture = new CultureInfo("es-ES");
                InitializeComponent();            
            }

    lunes, 9 de mayo de 2016 1:27