web-dev-qa-db-fra.com

Problème de calendrier dans Ajouter le mois +1 au mois de calendrier dans Android

J'utilise le code suivant

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

la sortie est

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

pour ajouter +1 à jan donne mar mois. il se peut qu'il renvoie une sortie correcte si nous ajoutons 30 jours à la date actuelle. mais je veux montrer fév mois. Est-ce que quelqu'un peut m'aider s'il vous plaît..

27
Naveen

vous pouvez voir que le champ +1 à définir ajoute une date de 30 jours différente de vos dates (observée à partir de votre sortie.)

si vous voulez des mois alors utilisez le code

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
54
Ram kiran

Vous devez utiliser add() comme,

cal.add(Calendar.MONTH, 1);

SORTIE ->

Before Thu Jan 31 10:15:04 IST 2013
After Thu Feb 28 10:15:04 IST 2013
7
Lalit Poptani
cal.set(Calendar.MONTH, cal.get( Calendar.MONTH ) + 1 );

La raison pour laquelle il montre Mar 3 de toute façon, c'est parce que cela ajoute apparemment 30 jours, ce qui est Feb 31st qui n'existe pas, donc il va à Mar 3.

Si vous vouliez plutôt le dernier jour du mois suivant, vous feriez quelque chose comme ceci:

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 */ );
}
2
Danyel

Ce type de travail date-heure est plus facile en utilisant soit:

  • Joda-Time 2.3 bibliothèque
    • Remplacement populaire des classes Java.util.Date et .Calendar fournies avec Java
    • Open source
    • Gratuit
    • Maintenu activement (en date du 2014-02)
  • Java.time package
    • Nouveau dans Java 8
    • Inspiré par Joda-Time, mais ré-architecturé
    • Défini par JSR 31
    • Tutoriel disponible

Exemple de code

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

Dump sur console…

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

Lors de l'exécution ...

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
2
Basil Bourque