J’ai cet object de date:
SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd HH:mm"); Date d1 = df.parse(interviewList.get(37).getTime());
valeur de d1 est Fri Jan 07 17:40:00 PKT 2011
J’essaie maintenant d’append 10 minutes à la date ci-dessus.
Calendar cal = Calendar.getInstance(); cal.setTime(d1); cal.add(Calendar.MINUTE, 10); Ssortingng newTime = df.format(cal.getTime());
Valeur des changements de 2011-50-07 17:50
à 2011-50-07 17:50
mais il devrait être 07-01-2011 17:50
.
Il ajoute les minutes correctement mais cela change aussi le mois, je ne sais pas pourquoi!
Le problème pour vous est que vous utilisez mm
. Vous devriez utiliser MM
. MM
est pour le mois et mm
est pour les minutes. Essayez avec yyyy-MM-dd HH:mm
Autre approche:
Cela peut être aussi simple que cela (une autre option consiste à utiliser joda-time )
static final long ONE_MINUTE_IN_MILLIS=60000;//millisecs Calendar date = Calendar.getInstance(); long t= date.getTimeInMillis(); Date afterAddingTenMins=new Date(t + (10 * ONE_MINUTE_IN_MILLIS));
Méthode pratique pour implémenter la réponse de @Pangea:
/* * Convenience method to add a specified number of minutes to a Date object * From: http://stackoverflow.com/questions/9043981/how-to-add-minutes-to-my-date * @param minutes The number of minutes to add * @param beforeTime The time that will have minutes added to it * @return A date object with the specified number of minutes added to it */ private static Date addMinutesToDate(int minutes, Date beforeTime){ final long ONE_MINUTE_IN_MILLIS = 60000;//millisecs long curTimeInMs = beforeTime.getTime(); Date afterAddingMins = new Date(curTimeInMs + (minutes * ONE_MINUTE_IN_MILLIS)); return afterAddingMins; }
vous pouvez utiliser la classe DateUtils dans le package org.apache.commons.lang3.time
int addMinuteTime = 5; Date targetTime = new Date(); //now targetTime = DateUtils.addMinutes(targetTime, addMinuteTime); //add minute
Ceci est incorrectement spécifié:
SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd HH:mm");
Vous utilisez les minutes au lieu du mois (MM)
Pour éviter toute dépendance, vous pouvez utiliser java.util.Calendar comme suit:
Calendar now = Calendar.getInstance(); now.add(Calendar.MINUTE, 10); Date teenMinutesFromNow = now.getTime();
En Java 8, nous avons une nouvelle API:
LocalDateTime dateTime = LocalDateTime.now().plus(Duration.of(10, ChronoUnit.MINUTES)); Date tmfn = Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant());
Il y a une erreur dans le modèle de votre SimpleDateFormat. CA devrait etre
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
utilisez ce format,
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
mm pour minutes et MM pour mois
LocalDateTime.parse( "2016-01-23 12:34".replace( " " , "T" ) ) .atZone( ZoneId.of( "Asia/Karachi" ) ) .plusMinutes( 10 )
Utilisez les excellentes classes java.time pour le travail de date-heure. Ces classes remplacent les anciennes classes de date / heure gênantes telles que java.util.Date
et java.util.Calendar
.
Les classes java.time utilisent par défaut les formats standard ISO 8601 pour parsingr / générer des chaînes de valeurs date-heure. Pour que votre chaîne d’entrée soit conforme, remplacez le SPACE au milieu par un T
Ssortingng input = "2016-01-23 12:34" ; Ssortingng inputModified = input.replace( " " , "T" );
LocalDateTime
Analyser votre chaîne d’entrée en tant que LocalDateTime
car il ne LocalDateTime
aucune information sur le fuseau horaire ou l’offset-from-UTC.
LocalDateTime ldt = LocalDateTime.parse( inputModified );
Ajouter dix minutes.
LocalDateTime ldtLater = ldt.plusMinutes( 10 );
ldt.toSsortingng (): 2016-01-23T12: 34
ldtLater.toSsortingng (): 2016-01-23T12: 44
Voir le code en direct sur IdeOne.com .
Ce LocalDateTime
n’a pas de fuseau horaire, donc il ne représente pas un point sur le scénario. Appliquez un fuseau horaire pour traduire à un moment réel. Spécifiez un nom de fuseau horaire approprié dans le format du continent/region
, par exemple America/Montreal
, Africa/Casablanca
ou Pacific/Auckland
ou Asia/Karachi
. N’utilisez jamais les abréviations de 3 à 4 lettres telles que EST
ou IST
ou PKT
car ce ne sont pas de véritables fuseaux horaires, non normalisés, et même pas uniques (!).
ZonedDateTime
Si vous connaissez le fuseau horaire prévu pour cette valeur, appliquez un ZoneId
pour obtenir un ZonedDateTime
.
ZoneId z = ZoneId.of( "Asia/Karachi" ); ZonedDateTime zdt = ldt.atZone( z );
zdt.toSsortingng (): 2016-01-23T12: 44 + 05: 00 [Asia / Karachi]
Pensez à append ces dix minutes avant ou après avoir ajouté un fuseau horaire. Vous pouvez obtenir un résultat très différent en raison d’anomalies telles que l’heure d’été (DST) qui modifie l’ horloge .
Que vous ajoutiez les 10 minutes avant ou après l’ajout de la zone dépend de la signification de votre scénario et de vos règles métier.
Astuce: lorsque vous envisagez un moment spécifique sur la timeline, conservez toujours les informations de fuseau horaire . Ne perdez pas cette information, comme cela a été fait avec vos données d’entrée. Est-ce que la valeur 12:34
censée être midi au Pakistan ou midi en France ou midi au Québec? Si vous vouliez dire midi au Pakistan, dites-le en incluant au moins le décalage de l’UTC ( +05:00
), et mieux encore, le nom du fuseau horaire ( Asia/Karachi
).
Instant
Si vous voulez le même moment vu à travers l’objective de l’ UTC , extrayez un Instant
. La classe Instant
représente un moment sur la timeline en UTC avec une résolution de nanosecondes (jusqu’à neuf (9) chiffres d’une fraction décimale).
Instant instant = zdt.toInstant();
Évitez autant que possible les vieilles classes fastidieuses. Mais si vous devez, vous pouvez convertir. Appelez de nouvelles méthodes ajoutées aux anciennes classes.
java.util.Date utilDate = java.util.Date.from( instant );
Le framework java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciennes classes de date / heure héritées telles que java.util.Date
, Calendar
et SimpleDateFormat
.
Le projet Joda-Time , maintenant en mode maintenance , conseille la migration vers java.time.
Pour en savoir plus, consultez le didacticiel Oracle . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .
Où obtenir les classes java.time?
Le projet ThreeTen-Extra étend java.time avec des classes supplémentaires. Ce projet est un terrain d’essai pour d’éventuels ajouts futurs à java.time. Vous pouvez y trouver des classes utiles telles que Interval
, YearWeek
, YearQuarter
, etc.
Une fois votre date analysée, j’utilise cette fonction utilitaire pour append des heures, des minutes ou des secondes:
public class DateTimeUtils { private static final long ONE_HOUR_IN_MS = 3600000; private static final long ONE_MIN_IN_MS = 60000; private static final long ONE_SEC_IN_MS = 1000; public static Date sumTimeToDate(Date date, int hours, int mins, int secs) { long hoursToAddInMs = hours * ONE_HOUR_IN_MS; long minsToAddInMs = mins * ONE_MIN_IN_MS; long secsToAddInMs = secs * ONE_SEC_IN_MS; return new Date(date.getTime() + hoursToAddInMs + minsToAddInMs + secsToAddInMs); } }
Soyez prudent lorsque vous ajoutez de longues périodes de temps, 1 jour n’est pas toujours 24 heures (ajustements de type heure avancée, secondes bissextiles, etc.), le Calendar
est recommandé pour cela.
Travaillez pour moi DateUtils
//import import org.apache.commons.lang.time.DateUtils
…
//Added and removed minutes to increase current range dates Date horaInicialCorteEspecial = DateUtils.addMinutes(new Date(corteEspecial.horaInicial.getTime()),-1) Date horaFinalCorteEspecial = DateUtils.addMinutes(new Date(corteEspecial.horaFinal.getTime()),1)
Juste pour quiconque est intéressé. Je travaillais sur un projet iOS qui nécessitait des fonctionnalités similaires, donc j’ai fini par porter la réponse de @jeznag rapidement
private func addMinutesToDate(minutes: Int, beforeDate: NSDate) -> NSDate { var SIXTY_SECONDS = 60 var m = (Double) (minutes * SIXTY_SECONDS) var c = beforeDate.timeIntervalSince1970 + m var newDate = NSDate(timeIntervalSince1970: c) return newDate }