sumar sincronizar sincronización recuperar planner mes google configurar con como celular calendario actualizar java android date

java - sincronización - sincronizar s planner con google calendar



Problema de calendario en Agregar mes+1 a mes calendario en Android (4)

Estoy usando el siguiente código

Calendar cal = Calendar.getInstance(); System.out.println("Before "+cal.getTime()); cal.set(Calendar.MONTH, 01); System.out.println("After "+cal.getTime());

la salida es

Before Thu Jan 31 10:07:34 IST 2013 After Sun Mar 03 10:07:34 IST 2013

Por agregar +1 a jan está dando mes de mar . Puede ser que esté devolviendo la salida correcta si agregamos 30 días a la fecha actual. Pero quiero mostrar el mes de febrero . puede alguien ayudarme por favor..


Este tipo de trabajo de fecha y hora es más fácil usando:

  • Biblioteca Joda-Time 2.3
    • Reemplazo popular para las clases java.util.Date & .Calendar empaquetadas con Java
    • Fuente abierta
    • Libre de costo
    • Mantenido activamente (a partir de 2014-02)
  • paquete java.time

Código de ejemplo

DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" ); // Or, DateTimeZone.UTC DateTime dateTime = new DateTime( timeZone ); DateTime monthAgo = dateTime.plusMonths( -1 ); // Smartly handles various month lengths, leap year, and so on. DateTime monthLater = dateTime.plusMonths( 1 );

Volcar a la consola ...

System.out.println( "dateTime: " + dateTime ); System.out.println( "monthAgo: " + monthAgo ); System.out.println( "monthAgo start of day: " + monthAgo.withTimeAtStartOfDay() ); System.out.println( "monthLater: " + monthLater );

Cuando se ejecuta ...

dateTime: 2014-02-24T01:53:22.386+01:00 monthAgo: 2014-01-24T01:53:22.386+01:00 monthAgo start of day: 2014-01-24T00:00:00.000+01:00 monthLater: 2014-03-24T01:53:22.386+01:00


Puede ver que el campo +1 para establecer agrega una fecha de 30 días diferente a sus fechas (observada desde su salida).

Si quieres meses, usa el código.

Calendar cal = Calendar.getInstance(); System.out.println("Before "+cal.getTime()); //Before Thu Jan 31 10:16:23 IST 2013 cal.add(Calendar.MONTH, 1); System.out.println("After "+cal.getTime()); //After Thu Feb 28 10:16:23 IST 2013


Tienes que usar add() como,

cal.add(Calendar.MONTH, 1);

SALIDA ->

Before Thu Jan 31 10:15:04 IST 2013 After Thu Feb 28 10:15:04 IST 2013


cal.set(Calendar.MONTH, cal.get( Calendar.MONTH ) + 1 );

La razón por la que muestra el Mar 3 todos modos, es porque aparentemente agrega 30 días, que es Feb 31st que no existe, por lo que va al Mar 3 .

Si quisieras el último día del mes siguiente, harías algo como esto:

int month = cal.get( Calendar.MONTH ); cal.set(Calendar.MONTH, cal.get(Calendar.MONTH) + 1); if( cal.get( month ) > month + 1 ) { cal.set( Calendar.MONTH, month + 1 ); cal.set( Calendar.DAY, /* here comes your day amount finding algorithm */ ); }