Comment incrémenter une date d'un jour de Java?
je travaille avec une date dans ce format: yyyy-mm-dd
.
comment incrémenter cette date d'un jour?
24 réponses
quelque Chose comme ça devrait faire l'affaire:
String dt = "2008-01-01"; // Start date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
c.setTime(sdf.parse(dt));
c.add(Calendar.DATE, 1); // number of days to add
dt = sdf.format(c.getTime()); // dt is now the new date
Java semble être bien derrière le huit-ball comparé à C#. Cette méthode d'utilité montre la façon de faire en Java SE 6 en utilisant le calendrier .ajouter la méthode (probablement le seul moyen facile).
public class DateUtil
{
public static Date addDays(Date date, int days)
{
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, days); //minus number would decrement the days
return cal.getTime();
}
}
pour ajouter un jour, selon la question posée, appelez-le comme suit:
String sourceDate = "2012-02-29";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date myDate = format.parse(sourceDate);
myDate = DateUtil.addDays(myDate, 1);
je préfère utiliser DateUtils D'Apache. Vérifier cette http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/time/DateUtils.html . C'est pratique surtout quand vous devez l'utiliser à plusieurs endroits dans votre projet et que vous ne voudriez pas écrire votre méthode one liner pour cela.
L'API dit:
addDays (Date date, int amount): ajoute un nombre de jours à une date de retour d'un nouvel objet.
notez qu'il retourne un nouvel objet Date et ne modifie pas le précédent lui-même.
de java.temps
sur Java 8 et plus tard, le java.le paquet de temps rend cela plus ou moins automatique. ( Tutoriel )
en supposant String
entrées et sorties:
import java.time.LocalDate;
public class DateIncrementer {
static public String addOneDay(String date) {
return LocalDate.parse(date).plusDays(1).toString();
}
}
SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
Calendar cal = Calendar.getInstance();
cal.setTime( dateFormat.parse( inputString ) );
cal.add( Calendar.DATE, 1 );
construisez un objet calendaire et utilisez la méthode add(Calendar.DATE, 1);
regardez Joda-Time ( http://joda-time.sourceforge.net / ).
DateTimeFormatter parser = ISODateTimeFormat.date();
DateTime date = parser.parseDateTime(dateString);
String nextDay = parser.print(date.plusDays(1));
veuillez noter que cette ligne ajoute 24 heures:
d1.getTime() + 1 * 24 * 60 * 60 * 1000
mais cette ligne ajoute un jour
cal.add( Calendar.DATE, 1 );
les jours avec un changement d'heure (25 ou 23 heures) vous obtiendrez des résultats différents!
Java 8 a ajouté une nouvelle API pour travailler avec les dates et les heures.
avec Java 8 Vous pouvez utiliser les lignes de code suivantes:
// parse date from yyyy-mm-dd pattern
LocalDate januaryFirst = LocalDate.parse("2014-01-01");
// add one day
LocalDate januarySecond = januaryFirst.plusDays(1);
vous pouvez utiliser du java Simple.util lib
Calendar cal = Calendar.getInstance();
cal.setTime(yourDate);
cal.add(Calendar.DATE, 1);
yourDate = cal.getTime();
Date today = new Date();
SimpleDateFormat formattedDate = new SimpleDateFormat("yyyyMMdd");
Calendar c = Calendar.getInstance();
c.add(Calendar.DATE, 1); // number of days to add
String tomorrow = (String)(formattedDate.format(c.getTime()));
System.out.println("Tomorrows date is " + tomorrow);
ça donnera la date de demain. Les paramètres c.add(...)
peuvent être changés de 1 à un autre nombre pour un incrément approprié.
long timeadj = 24*60*60*1000;
Date newDate = new Date (oldDate.getTime ()+timeadj);
cela prend le nombre de millisecondes depuis l'époque de oldDate et ajoute 1 jour de millisecondes puis utilise le constructeur public Date() pour créer une date en utilisant la nouvelle valeur. Cette méthode permet d'ajouter 1 jour, ou n'importe quel nombre d'heures/minutes, pas seulement des jours entiers.
si vous utilisez Java 8 , faites comme ceci.
LocalDate sourceDate = LocalDate.of(2017, Month.MAY, 27); // Source Date
LocalDate destDate = sourceDate.plusDays(1); // Adding a day to source date.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // Setting date format
String destDate = destDate.format(formatter)); // End date
si vous voulez utiliser SimpleDateFormat , alors faites-le comme ceci.
String sourceDate = "2017-05-27"; // Start date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.setTime(sdf.parse(sourceDate)); // parsed date and setting to calendar
calendar.add(Calendar.DATE, 1); // number of days to add
String destDate = sdf.format(calendar.getTime()); // End date
Since Java 1.5 TimeUnit.JOUR.toMillis (1) semble plus propre pour moi.
SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
Date day = dateFormat.parse(string);
// add the day
Date dayAfter = new Date(day.getTime() + TimeUnit.DAYS.toMillis(1));
Apache Commons possède déjà ces DateUtils.addDays (Date date, int amount) http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/time/DateUtils.html#addDays%28java.util.Date,%20int%29 que vous utilisez ou vous pourriez aller avec le JodaTime pour le rendre plus propre.
il suffit de passer la date en Chaîne de caractères et le nombre de jours prochains
private String getNextDate(String givenDate,int noOfDays) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
String nextDaysDate = null;
try {
cal.setTime(dateFormat.parse(givenDate));
cal.add(Calendar.DATE, noOfDays);
nextDaysDate = dateFormat.format(cal.getTime());
} catch (ParseException ex) {
Logger.getLogger(GR_TravelRepublic.class.getName()).log(Level.SEVERE, null, ex);
}finally{
dateFormat = null;
cal = null;
}
return nextDaysDate;
}
si vous voulez ajouter une seule unité de temps et que vous vous attendez à ce que d'autres champs soient incrémentés, vous pouvez utiliser en toute sécurité la méthode add. Voir l'exemple ci-dessous:
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.set(1970,Calendar.DECEMBER,31);
System.out.println(simpleDateFormat1.format(cal.getTime()));
cal.add(Calendar.DATE, 1);
System.out.println(simpleDateFormat1.format(cal.getTime()));
cal.add(Calendar.DATE, -1);
System.out.println(simpleDateFormat1.format(cal.getTime()));
Affichera:
1970-12-31
1971-01-01
1970-12-31
en java 8 Vous pouvez utiliser java.time.LocalDate
LocalDate parsedDate = LocalDate.parse("2015-10-30"); //Parse date from String
LocalDate addedDate = parsedDate.plusDays(1); //Add one to the day field
vous pouvez convertir en java.util.Date
objet comme suit.
Date date = Date.from(addedDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
vous pouvez former LocalDate
dans une chaîne de caractères comme suit.
String str = addedDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
utilisez L'API DateFormat
pour convertir la chaîne en un objet Date, puis utilisez L'API Calendar
pour ajouter un jour. Faites-moi savoir si vous voulez des exemples de code spécifiques, et je peux mettre à jour ma réponse.
c'est très simple, essayer d'expliquer en un mot simple. obtenez la date d'aujourd'hui comme ci-dessous
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());// print today's date
calendar.add(Calendar.DATE, 1);
maintenant un jour d'avance avec cette date par calendrier.ajouter la méthode qui prend (constante, valeur). Ici constante pourrait être DATE, heures, min, sec etc. et la valeur est la valeur de constante. Comme pour un jour, devant constante est le Calendrier.La DATE et sa valeur sont 1 parce que nous voulons un jour à l'avance la valeur.
System.out.println(calendar.getTime());// print modified date which is
la date du lendemain
Merci
si vous utilisez Java 8, java.time.LocalDate
et java.time.format.DateTimeFormatter
peuvent rendre ce travail très simple.
public String nextDate(String date){
LocalDate parsedDate = LocalDate.parse(date);
LocalDate addedDate = parsedDate.plusDays(1);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-mm-dd");
return addedDate.format(formatter);
}
vous pouvez utiliser ce paquet de" org.Apache.commun.lang3.heure":
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date myNewDate = DateUtils.addDays(myDate, 4);
Date yesterday = DateUtils.addDays(myDate, -1);
String formatedDate = sdf.format(myNewDate);
Dans Java 8 moyen simple de le faire est:
Date.from(Instant.now().plusSeconds(SECONDS_PER_DAY))
Date newDate = new Date();
newDate.setDate(newDate.getDate()+1);
System.out.println(newDate);