sumar - restar un mes a una fecha java
Obtener el inicio y la fecha de finalizaciĆ³n de una semana usando la clase de calendario de Java (5)
Algunos codifican cómo hacerlo con el objeto Calendar
. También debería mencionar la biblioteca de tiempo joda, ya que puede ayudarte con muchos problemas de Date/Calendar
.
Código
public static void main(String[] args) {
// set the date
Calendar cal = Calendar.getInstance();
cal.set(2011, 10 - 1, 12);
// "calculate" the start date of the week
Calendar first = (Calendar) cal.clone();
first.add(Calendar.DAY_OF_WEEK,
first.getFirstDayOfWeek() - first.get(Calendar.DAY_OF_WEEK));
// and add six days to the end date
Calendar last = (Calendar) first.clone();
last.add(Calendar.DAY_OF_YEAR, 6);
// print the result
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(df.format(first.getTime()) + " -> " +
df.format(last.getTime()));
}
Quiero tener la última y la primera semana de una semana para una fecha determinada. por ejemplo, si la fecha es el 12 de octubre de 2011, entonces necesito las fechas 10 de octubre de 2011 (como fecha de inicio de la semana) y 16 de octubre de 2011 (como fecha de finalización de la semana) ¿Alguien sabe cómo obtener estas 2 fechas usando el calendario? clase (java.util.Calendar) muchas gracias!
Si quieres todas las fechas, entonces
first.add(Calendar.DAY_OF_WEEK,first.getFirstDayOfWeek() - first.get(Calendar.DAY_OF_WEEK));
for (int i = 1; i <= 7; i++) {
System.out.println( i+" Day Of that Week is",""+first.getTime());
first.add(Calendar.DAY_OF_WEEK,1);
}
Esta solución funciona para cualquier localidad (el primer día de la semana podría ser el domingo o el lunes).
Date date = new Date();
Calendar c = Calendar.getInstance();
c.setTime(date);
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK) - c.getFirstDayOfWeek();
c.add(Calendar.DAY_OF_MONTH, -dayOfWeek);
Date weekStart = c.getTime();
// we do not need the same day a week after, that''s why use 6, not 7
c.add(Calendar.DAY_OF_MONTH, 6);
Date weekEnd = c.getTime();
Por ejemplo, hoy es el 29 de enero de 2014. Para la localidad con el domingo como primer día de la semana, obtendrá:
start: 2014-01-26
end: 2014-02-01
Para la configuración regional con el lunes como primer día, las fechas serán:
start: 2014-01-27
end: 2014-02-02
Aquí está el código de ejemplo
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
cal.set(2016, 2, 15);
{
Calendar startCal = Calendar.getInstance();
startCal.setTimeInMillis(cal.getTimeInMillis());
int dayOfWeek = startCal.get(Calendar.DAY_OF_WEEK);
startCal.set(Calendar.DAY_OF_MONTH,
(startCal.get(Calendar.DAY_OF_MONTH) - dayOfWeek) + 1);
System.out.println("end date : " + startCal.getTime());
}
{
Calendar endCal = Calendar.getInstance();
endCal.setTimeInMillis(cal.getTimeInMillis());
int dayOfWeek = endCal.get(Calendar.DAY_OF_WEEK);
endCal.set(Calendar.DAY_OF_MONTH, endCal.get(Calendar.DAY_OF_MONTH)
+ (7 - dayOfWeek));
System.out.println("start date : " + endCal.getTime());
}
}
que se imprimirá
start date : Sun Mar 13 20:30:30 IST 2016
end date : Sat Mar 19 20:30:30 IST 2016
He encontrado que la fórmula en la respuesta aceptada solo funcionará en algunos casos. Por ejemplo, su semana comienza el sábado y hoy es domingo. Para llegar al primer día de la semana caminamos de regreso 1 día, pero la fórmula cal.get(Calendar.DAY_OF_WEEK) - cal.getFirstDayOfWeek()
dará la respuesta -6. La solución es usar un módulo para que la fórmula se adapte, por así decirlo.
int daysToMoveToStartOfWeek = (
7 +
cal.get(Calendar.DAY_OF_WEEK) -
cal.getFirstDayOfWeek()
)%7;
cal.add(Calendar.DAY_OF_WEEK, -1 * daysToMoveToStartOfWeek);