una studio semana saber que pida operaciones obtener número numero nombre fechas fecha día diga correspondiente con java calendar dayofweek

studio - Cómo obtener el primer día de un número de semana dado en Java



que pida un número del 1 al 7 y diga el día de la semana correspondiente java (7)

Déjame explicarme. Al saber el número de la semana y el año de una fecha:

Date curr = new Date(); Calendar cal = Calendar.getInstance(); cal.setTime(curr); int nweek = cal.WEEK_OF_YEAR; int year = cal.YEAR;

Pero ahora no sé cómo obtener la fecha del primer día de esa semana. He estado buscando en Calendario, Fecha, DateFormat pero nada que pueda ser útil ...

¿Cualquier sugerencia? (trabajando en Java)


Aquí hay un código rápido y sucio para hacer esto. Este código crea un objeto de calendario con la fecha del día actual, calcula el día actual de la semana y resta el día de la semana para que esté en el primero (domingo). Aunque estoy usando DAY_OF_YEAR va bien con los años (el 1/2/10 devolverá el 12/27/09, lo cual es correcto).

import java.text.Format; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class DOW { public static void main(String[] args) { DOW dow = new DOW(); dow.doIt(); System.exit(0); } private void doIt() { Date curr = new Date(); Calendar cal = Calendar.getInstance(); cal.setTime(curr); int currentDOW = cal.get(Calendar.DAY_OF_WEEK); cal.add(Calendar.DAY_OF_YEAR, (currentDOW * -1)+1); Format formatter = new SimpleDateFormat("MM/dd/yy"); System.out.println("First day of week="+formatter.format(cal.getTime())); } }


Esos campos no devuelven los valores. Esas son constantes que identifican los campos en el objeto de Calendar que puede obtener / establecer / agregar. Para lograr lo que desea, primero necesita obtener un Calendar , borrarlo y establecer los valores conocidos. Establecerá automáticamente la fecha al primer día de esa semana.

// We know week number and year. int week = 3; int year = 2010; // Get calendar, clear it and set week number and year. Calendar calendar = Calendar.getInstance(); calendar.clear(); calendar.set(Calendar.WEEK_OF_YEAR, week); calendar.set(Calendar.YEAR, year); // Now get the first day of week. Date date = calendar.getTime();

Por favor, aprenda a leer los javadocs para aprender a usar clases / métodos / campos y no intente meter al azar en su IDE;)

Dicho esto, java.util.Date y java.util.Calendar son fallas épicas . Si puedes, considera cambiar a Joda Time .


No he hecho muchas citas en java, pero una solución podría ser:

cal.set(Calendar.DAY_OF_YEAR, cal.get(Calendar.DAY_OF_YEAR) - cal.get(Calendar.DAY_OF_WEEK));

Lógica:

Obtenga el día de la semana y réstelo de la fecha actual (puede necesitar -1, dependiendo de si necesita que el lunes sea el primer día de la semana o el domingo)


Prueba el algoritmo de calendario gregoriano:

public int getFirstDay(int m, int year) { int k=1; int c, y, w, M=0; if(m>2 && m<=12) M=m-2; else if(m>0 && M<=2) { M=m+10; year-=1; } c=year/100; y=year%100; w=(int)((k+(Math.floor(2.6*M - 0.2))-2*c+y+(Math.floor(y/4))+(Math.floor(c/4)))%7);//a fantastic formula if(w<0) w+=7; return w;//thus the day of the week is obtained! }


Prueba esto:

public static Calendar setWeekStart(Calendar calendar) { while (calendar.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) { calendar.add(Calendar.DATE, -1); } setDayStart(calendar); // method which sets H:M:S:ms to 0 return calendar; }


Sin embargo, otra manera ...

GregorianCalendar cal = new GregorianCalendar(); cal.clearTime(); Integer correction = 1-cal.get(GregorianCalendar.DAY_OF_WEEK) cal.add(Calendar.DATE, correction);

cal es ahora el primer día de la semana

1-cal.get(GregorianCalendar.DAY_OF_WEEK)

se evalúa a 1-1 para el domingo (primer día de la semana en mi configuración regional) y 1-2 para el lunes, así que esto le dará la corrección necesaria para retroceder el reloj hasta el domingo


Tenga cuidado con esos, calendar.get(Calendar.WEEK_OF_YEAR) devuelve 1 si es a finales de diciembre y ya una semana que termina en el próximo año.

Utilizando

// cal2.set(Calendar.WEEK_OF_YEAR, cal.get(Calendar.WEEK_OF_YEAR)); // cal2.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);

establece la fecha de cal2 a, por ejemplo, finales de 2009 el 29/12/2010 !!

Utilicé esto:

cal2.set(Calendar.DAY_OF_YEAR, cal.get(Calendar.DAY_OF_YEAR)); //to round at the start of day cal2.set(Calendar.YEAR, cal.get(Calendar.YEAR)); cal2.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); //to round at the start of week

También me aseguro de que las semanas en mis calendarios, sin importar en qué lugar están, comiencen los lunes:

cal.setFirstDayOfWeek(Calendar.MONDAY); cal2.setFirstDayOfWeek(Calendar.MONDAY);