Edición de calendario en Añadir mes +1 al mes del calendario en Android

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 

Para agregar +1 a enero es dar mar mes. Puede estar devolviendo la salida correcta si añadimos 30 días a la fecha presente. Pero quiero mostrar feb mes. puede alguien ayudarme por favor..

Puede ver que el campo +1 para establecer está agregando una fecha de 30 días diferente a las fechas (observada en su salida).

Si desea meses a continuación, utilice 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 Mar 3 todos modos, es porque aparentemente agrega 30 días, que es Feb 31st que no existe, por lo que va a Mar 3 .

Si quisieras el último día del mes siguiente en lugar de otro, 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 */ ); } 

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

  • Biblioteca Joda-Time 2.3
    • Reemplazo popular para las clases java.util.Date & .Calendar incluidas en Java
    • Fuente abierta
    • Libre de costo
    • Mantenido activamente (a partir de 2014-02)
  • Paquete java.time
    • Nuevo en Java 8
    • Inspirado por Joda-Time, pero re-arquitectado
    • Definido por JSR 310
    • Tutorial disponible

Ejemplo de código

 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 ); 

Descarga 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 
 public class NewClass extends JFrame { public NewClass() { Calendar cal=new GregorianCalendar(); JPanel p1=new JPanel(); JPanel p2=new JPanel(); JPanel p3=new JPanel(); JPanel p=new JPanel(); BorderLayout layout=new BorderLayout(); p1.setLayout(new FlowLayout(FlowLayout.LEFT)); JLabel l1=new JLabel("Sunday"); JLabel l2=new JLabel("Monday"); JLabel l3=new JLabel("Tuesday"); JLabel l4=new JLabel("Wednsday"); JLabel l5=new JLabel("Thursday"); JLabel l6=new JLabel("Friday"); JLabel l7=new JLabel("Saturday"); p1.add(l1); p1.add(l2); p1.add(l3); p1.add(l4); p1.add(l5); p1.add(l6); p1.add(l7); p1.setBorder(new LineBorder(Color.BLACK)); int x=cal.get(Calendar.MONTH)+1; System.out.println(x); int y=cal.get(Calendar.DAY_OF_WEEK); System.out.println(y); p2.setLayout(new GridLayout(5,7)); if(x==4||x==6||x==9||x==11) { int j=1; for(int i=0;i<(7-(y-1));i++) { JLabel l=new JLabel(" ",JLabel.CENTER); l.setBorder(new LineBorder(Color.BLACK)); p2.add(l); j++; } for(int i=1;i<=30;i++) { JLabel l=new JLabel(""+i,JLabel.CENTER); l.setBorder(new LineBorder(Color.BLACK)); p2.add(l); j++; } } p.setLayout(layout); p.add(p2,BorderLayout.CENTER); p.add(p1,BorderLayout.NORTH); add(p,BorderLayout.CENTER); JLabel l8=new JLabel(""+(cal.get(Calendar.MONTH+1)+"/"+cal.get(Calendar.YEAR))); l8.setHorizontalTextPosition(JLabel.CENTER); p3.setLayout(new FlowLayout(FlowLayout.CENTER)); p3.add(l8); add(p3,BorderLayout.NORTH); add(p,BorderLayout.CENTER); } 
  • Android Studio. Un error
  • Android: Leer el HTML de una página web en una cadena
  • DexIndexOverflowException Con la API de Google Maps
  • Teclado suave de Android con botones superpuestos (Captura de pantalla)
  • ¿Qué algoritmos hash están disponibles en Android?
  • Extendiendo AsyncTask <Void, Void, Void>
  • Error al inflar la clase android.support.v7.widget.CardView
  • Gradle compile filetree sintaxis
  • Aplicación de Android, El marcado en el documento que sigue al elemento raíz debe estar bien formado
  • La conversión al formato de Dalvik falló: No se puede ejecutar dex: Los archivos múltiples dex definen Lcom / squareup / okhttp / Address;
  • El equivalente de Java de
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.