Je travaille avec une date dans ce format: yyyy-mm-dd
.
Comment puis-je incrémenter cette date d'un jour?
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 en retard sur le huitième ballon par rapport à C #. Cette méthode utilitaire indique comment procéder dans Java SE 6 à l’aide de la méthode Calendar.add (sans doute 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, par 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);
Sur Java 8 et les versions ultérieures, le package Java.time rend cela assez automatique. ( Didacticiel )
En supposant que String
entrée et sortie:
import Java.time.LocalDate;
public class DateIncrementer {
static public String addOneDay(String date) {
return LocalDate.parse(date).plusDays(1).toString();
}
}
Je préfère utiliser DateUtils de Apache. Vérifiez cette http://commons.Apache.org/proper/commons-lang/javadocs/api-2.6/org/Apache/commons/lang/time/DateUtils.html . C'est pratique, surtout lorsque vous devez utiliser plusieurs endroits dans votre projet et que vous ne voulez pas écrire votre méthode one-liner pour cela.
L'API dit:
addDays (Date date, int montant): Ajoute un nombre de jours à une date renvoyant un nouvel objet.
Notez qu'il renvoie un nouvel objet Date et n'apporte aucune modification au précédent.
SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
Calendar cal = Calendar.getInstance();
cal.setTime( dateFormat.parse( inputString ) );
cal.add( Calendar.DATE, 1 );
Construisez un objet Calendar et utilisez la méthode add (Calendar.DATE, 1);
Jetez un coup d'œil à Joda-Time ( https://www.joda.org/joda-time/ ).
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 où l'heure d'été est modifiée (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 Simple Java.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);
Cela donnera la date de demain. Les paramètres c.add(...)
peuvent être modifiés de 1 à un autre nombre pour l’incrément approprié.
Si vous utilisez Java 8 , procédez comme suit.
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 souhaitez utiliser SimpleDateFormat , procédez comme suit.
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
long timeadj = 24*60*60*1000;
Date newDate = new Date (oldDate.getTime ()+timeadj);
Cela prend le nombre de millisecondes depuis Epoch depuis oldDate et ajoute 1 jour de millisecondes, puis utilise le constructeur public Date () pour créer une date à l'aide de la nouvelle valeur. Cette méthode vous permet d’ajouter un jour, ou n’importe quel nombre d’heures/minutes, pas seulement des jours entiers.
Depuis Java 1.5TimeUnit.DAYS.toMillis (1) me semble plus propre.
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));
Il suffit de passer la date dans String et le nombre de jours suivants
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 souhaitez ajouter une seule unité de temps et que vous souhaitez que d'autres champs soient également incrémentés, vous pouvez utiliser en toute sécurité la méthode add. Voir 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()));
Va imprimer:
1970-12-31
1971-01-01
1970-12-31
Apache Commons a déjà ce DateUtils.addDays (Date date, int montant) 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 pouvez utiliser JodaTime pour le rendre plus propre.
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 objet Java.util.Date
comme suit.
Date date = Date.from(addedDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
Vous pouvez formater LocalDate
dans une chaîne comme suit.
String str = addedDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
C'est très simple, essayer d'expliquer dans un simple mot . Obtenir la date du jour comme ci-dessous
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());// print today's date
calendar.add(Calendar.DATE, 1);
Définissez maintenant un jour d’avance avec cette date par la méthode calendar.add qui prend (constante, valeur). Ici, constante pourrait être DATE, heure, minute, seconde, etc. et valeur est la valeur de constante. Comme pour un jour, la constante d'avance est Calendar.DATE et sa valeur est 1 car nous voulons une valeur d'avance.
System.out.println(calendar.getTime());// print modified date which is
date de demain
Merci
En Java 8, le moyen le plus simple est de:
Date.from(Instant.now().plusSeconds(SECONDS_PER_DAY))
Utilisez le DateFormat
API pour convertir la chaîne en objet Date, puis le Calendar
API pour ajouter un jour. Faites-moi savoir si vous souhaitez des exemples de code spécifiques, et je pourrai mettre à jour ma réponse.
Si vous utilisez Java 8, Java.time.LocalDate
et Java.time.format.DateTimeFormatter
peuvent vous faciliter la tâche.
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);
}
Si vous utilisez Java SE 8 ou une version supérieure, vous devez utiliser le nouveau API Date/Heure
int days = 7;
LocalDate dateRedeemed = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/YYYY");
String newDate = dateRedeemed.plusDays(days).format(formatter);
System.out.println(newDate);
Si vous devez convertir Java.util.Date en Java.time.LocalDate, vous pouvez utiliser cette méthode.
public LocalDate asLocalDate(Date date) {
Instant instant = date.toInstant();
ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault());
return zdt.toLocalDate();
}
Si vous utilisez une version antérieure à Java SE 8, je vous conseille d'utiliser Joda-Time
Joda-Time fournit un remplacement de qualité pour les classes de date et d'heure Java et constitue la bibliothèque de date et d'heure standard de facto pour Java antérieure à Java SE 8.
int days = 7;
DateTime dateRedeemed = DateTime.now();
DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/YYYY");
String newDate = dateRedeemed.plusDays(days).toString(formatter);
System.out.println(newDate);
Clarifions le cas d'utilisation: vous voulez faire de l'arithmétique de calendrier et commencer/finir avec un Java.util.Date .
Quelques approches:
Pensez à utiliser Java.time.Instant :
Date _now = new Date();
Instant _instant = _now.toInstant().minus(5, ChronoUnit.DAYS);
Date _newDate = Date.from(_instant);
Vous pouvez utiliser ce paquet depuis "org.Apache.commons.lang3.time":
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date myNewDate = DateUtils.addDays(myDate, 4);
Date yesterday = DateUtils.addDays(myDate, -1);
String formatedDate = sdf.format(myNewDate);
C'est simple en fait. Un jour contient 86400000 millisecondes. Donc, vous obtenez d'abord l'heure actuelle en millis à partir du système en utilisant System.currentTimeMillis()
, puis vous ajoutez les 84000000 milliSecondes et utilisez la classe Date
pour générer un format de date pour les millisecondes.
Exemple
String Today = new Date(System.currentTimeMillis()).toString();
String Today sera le 2019-05-9
String Tommorow = new Date(System.currentTimeMillis() + 86400000).toString();
String Tommorow sera le 2019-05-10
String DayAfterTommorow = new Date(System.currentTimeMillis() + (2 * 86400000)).toString();
String DayAfterTommorow sera le 2019-05-11
startCalendar.add(Calendar.DATE, 1); //Add 1 Day to the current Calender
Date newDate = new Date();
newDate.setDate(newDate.getDate()+1);
System.out.println(newDate);