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..
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
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
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 */ );
}
Ce type de travail date-heure est plus facile en utilisant soit:
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