1 votos

Como obtener total de semanas del año

Como puedo obtener el total de semanas del año con los dias correspondientes decada semana asignada

1 votos

No entiendo la parte de 'con los días correspondientes de cada semana asignada', pero para saber cuantas semanas hay, solo tienes que hacer un 365 / 7

1 votos

algo asi http://www.epochconverter.com/date-and-time/weeknumbers-by-year.php?year=2017

2voto

Moisés AC Puntos495

Hola, creo entender que quieres obtener algo como: "primer día de la semana 12: es lunes 21 abril de 1995". Entiendo que el lenguaje te va a permitir obtener directamente, por lo menos: el año y el día del mes, y el timestand, por lo que necesitas saber si es lunes, martes... y ¿que día de que semana? Haz un esquema y un seudocódigo, p.e.

Datos: 1 año = 365 días

semanas en un año = 365 / 7 = 52

días semana:    1 - lunes
                2 - martes
                3 - miércoles
                4 - jueves
                5 - viernes
                6 - sábado
                7 - domingo

1 de cada 4 años = 366 días (bisiesto)

1 enero es día 1 / semana 1

1 semana = 7 días

parte de una semana que representa 1 día: 1 semana / 7 días =  1 / 7 = 0.14

1 día = (1*24*60*60*1000) = 86400000 milisegundos

// Trabajamos en milisegundos desde el inicio de los tiempos, ummmm ¿1 de enero de 1970? no recuerdo la // fecha ahora, consultalo y averigua que día de la semana fue, p.e. si era martes

Vale divide el problema en dos partes:

  1. Saber que día de la semana es, p.e. martes
  2. Saber el orden del día de que semana. p.e. día 1, semana 43

1. Obtener día de la semana (lunes, martes...) fecha consulta = timestand (milisegundos correspondientes al día a consultar) días trascurridos desde dia 1 = fecha consulta / milisegundos x día

supongamos que han trascurridos 15000 días...
lo dividimos entre los dias que tiene una semana

dias trascurridos / dias semana = 15000 / 7 = 2142.86 semanas

Si el resultado fuera un número entero sabrías que es martes, como tiene decimales hay que averiguar la parte decimal que corresponderia a un día:

pico por día = 1 semana / 7 días = 1/7 = 0.14

dividir el decimal obtenido antes por el equivalente a un dia te dice los dias trascurridos desde que fuera martes: 
    dias desde el martes = 0.86 / 0.14 = 6.14 (miercoles, jueves, viernes, sabado, domingo, lunes)

Si pasaron 6 días, ¿será lunes?

Creo que sería así la cosa, solo queda hacer una función y probar...

2. Obtener número del día de la semana (1, 2...):

Días trascurridos desde 1 enero del año de la fecha a consultar
días trascurridos = (timestand fecha consulta - timestand 1 enero mismo año) / milisegundos x día

Una vez que tienes el número de días que han pasado des el 1 de enero del presente año el tema que las semanas no suelen empezar el día 1 de enero, suelen estar partidas... por eso, con la función que habras creado para la parte 1, hay que obtener dia de la semana para el 1 de enero, si fue sabado, esa semana solo duro dos días en el presente año, ¿es la primera semana? consideremos que si, tendrías que consultarlo... 

Pon que los días trascurridos = 71
semana consulta = (días trascurridos - 2) / dias semana = (71 - 2) / 7 = 9.86

tienes 9 semanas completas + 1 que eran los 2 días de la primera + la semana actual = estas en la semana 11

ahora saber el número de día de la semana, vamos a volver a calcular con los picos de antes donde 1.00 es una semana 0.14 es un día (1/7) entonces:

    0.86 / 0.14 = 6.14 es decir que estas en el 6º día de la semana

Si lo he planteado bien sabrías que es lunes, y 6º día de la semana 11
Si lo haces, ya me cuentas como fue. 
Un saludo.

1 votos

el año tiene 52 semanas pero no son las mismas fechas en cada año, puesto que cambian las fechas ocupo obtener las fechas correspondientes de la semana, es ahi mi duda de como resolver lo. Pienso usar un combobox para seleccionar el año y una ves sea seleccionado el año en una lista estaran las semanas y lo que se debe de actualizar son las fechas de cada semana pero correspondiente a la semana

1 votos

si aun no me doy a entender, seria algo asi como en esta pagina http://www.epochconverter.com/date-and-time/weeknumbers-by-year.php?year=2017

2voto

despues de un tiempo encontre la manera de hacer lo les dejo el codigo por si un dia ocupa.

Codigo:

ArrayList AlYear = new ArrayList();
            for (int i = 2015; i <= 2050; i++) 
            {
                AlYear.Add(i);
            }
            DropDownList1.DataSource = AlYear;
            DropDownList1.DataBind();
protected void ItemSelected(object sender, EventArgs e)
{
        int year = int.Parse(DropDownList1.SelectedItem.Text);
        var jan1 = new DateTime(year, 1, 1);
        var startOfFirstWeek = jan1.AddDays(1 - (int)(jan1.DayOfWeek));
        var weeks =
            Enumerable
                .Range(0, 54)
                .Select(i => new
                {
                    weekStart = startOfFirstWeek.AddDays(i * 7)
                })
                .TakeWhile(x => x.weekStart.Year <= jan1.Year)
                .Select(x => new
                {
                    x.weekStart,
                    weekFinish = x.weekStart.AddDays(6)
                })
                .SkipWhile(x => x.weekFinish < jan1.AddDays(1))
                .Select((x, i) => new
                {
                    x.weekStart,
                    x.weekFinish,
                    weekNum = i + 1
                });
        DataTable dt = new DataTable();
        dt.Columns.AddRange(new DataColumn[3] { new DataColumn("Week"), new DataColumn("Dates"), new DataColumn("Selected") });
        foreach (var X in weeks)
        {
            dt.Rows.Add(X.weekNum, X.weekStart.ToShortDateString() + " To " + X.weekFinish.ToShortDateString());
        }
        GridView1.DataSource = dt;
        GridView1.DataBind();
        GridView1.HeaderRow.TableSection = TableRowSection.TableHeader;
    }
}

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: