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
- Androide HttpResponse siempre muere segunda vez que se llama
- Android: cómo mostrar el gridview en blanco con el botón
- Android Audio - Transmisión de generador de seno-tono comportamiento extraño
- Comparar dos cadenas en Java
- Tomando un cómputo pesado del subproceso de la interfaz de usuario de Android
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..
- Geocoder "Tiempo de espera de respuesta del servidor"
- GetHeight devuelve 0 para todos los objetos de IU de Android
- .setBackgroundColor con códigos de color hexadecimal AndroidStudio
- ¿Cómo puedo hacer mejor que la fuerza bruta para encontrar la ubicación más cercana?
- Emulador de Android (no se puede vincular a local 8601 para depurador)
- Acceso a almacenamiento Web o IndexedDB desde fuera del navegador en Android
- Java.lang.IllegalArgumentException: No se puede tener un viewTypeCount <1
- Cómo agregar o eliminar el filtro intención mediante programación en android?
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); }
- Ejecutar un pedazo de código sólo una vez cuando se instala una aplicación
- Cargar imagen de url en la notificación de Android