J'ai cet objet de date:
SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd HH:mm");
Date d1 = df.parse(interviewList.get(37).getTime());
la valeur de d1 est Fri Jan 07 17:40:00 PKT 2011
J'essaie maintenant d'ajouter 10 minutes à la date ci-dessus.
Calendar cal = Calendar.getInstance();
cal.setTime(d1);
cal.add(Calendar.MINUTE, 10);
String newTime = df.format(cal.getTime());
La valeur de newTime
est remplacée par 2011-50-07 17:50
.__, mais il devrait s'agir de 07-01-2011 17:50
.
Il ajoute les minutes correctement mais il change également de 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));
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
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;
}
Ceci est incorrectement spécifié:
SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd HH:mm");
Vous utilisez les minutes au lieu du mois (MM)
Afin d'é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());
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 date-heure. Ces classes supplantent les anciennes classes de date-heure, telles que Java.util.Date
et Java.util.Calendar
.
Les classes Java.time utilisent par défaut les formats ISO 8601 standard pour analyser/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
.
String input = "2016-01-23 12:34" ;
String inputModified = input.replace( " " , "T" );
LocalDateTime
Analysez votre chaîne d’entrée avec la valeur LocalDateTime
car elle ne contient aucune information sur le fuseau horaire ni sur le décalage par rapport à UTC.
LocalDateTime ldt = LocalDateTime.parse( inputModified );
Ajouter dix minutes.
LocalDateTime ldtLater = ldt.plusMinutes( 10 );
ldt.toString (): 2016-01-23T12: 34
ldtLater.toString (): 2016-01-23T12: 44
Voir code live sur IdeOne.com .
Cette LocalDateTime
n'a pas de fuseau horaire. Par conséquent, pas représente un point sur la timeline. Appliquez un fuseau horaire pour traduire un moment réel. Spécifiez un nom de fuseau horaire correct } au format continent/region
, tel que 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 elles sont pas des fuseaux horaires véritables, non normalisés et même uniques (!).
ZonedDateTime
Si vous connaissez le fuseau horaire prévu pour cette valeur, appliquez une ZoneId
pour obtenir une ZonedDateTime
.
ZoneId z = ZoneId.of( "Asia/Karachi" );
ZonedDateTime zdt = ldt.atZone( z );
zdt.toString (): 2016-01-23T12: 44 + 05: 00 [Asie/Karachi]
Demandez-vous s'il faut ajouter ces dix minutes avant ou après l'ajout d'un fuseau horaire. Vous risquez d'obtenir un résultat très différent en raison d'anomalies telles que l'heure d'été (DST) qui décale le heure de l'horloge murale .
L'ajout des 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.
Conseil: Lorsque vous souhaitez un moment précis sur la timeline, conservez toujours les informations sur le fuseau horaire. Ne perdez pas cette information, comme avec vos données d'entrée. La valeur 12:34
est-elle 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 par rapport à UTC (+05:00
) et, mieux encore, le nom du fuseau horaire (Asia/Karachi
).
Instant
Si vous voulez le même moment que vu à travers l'objectif de UTC , extrayez une Instant
. La classe Instant
représente un moment sur la ligne temporelle en UTC avec une résolution de nanosecondes (jusqu'à neuf (9) chiffres d'une fraction décimale).
Instant instant = zdt.toInstant();
Évitez les anciennes classes de date-heure gênantes autant que possible. Mais si vous devez, vous pouvez convertir. Appelez les nouvelles méthodes ajoutées aux anciennes classes.
Java.util.Date utilDate = Java.util.Date.from( instant );
Le cadre Java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciennes classes gênantes héritées _ date-heure telles que Java.util.Date
, Calendar
_, & SimpleDateFormat
.
Le projet Joda-Time , désormais en mode mode de maintenance , conseille la migration vers Java.time.
Pour en savoir plus, consultez le Tutoriel 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 à Java.time. Vous pouvez y trouver des classes utiles telles que Interval
_, YearWeek
, YearQuarter
_ et plus _.
Il y a une erreur dans le modèle de votre SimpleDateFormat. CA devrait etre
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
utiliser ce format,
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
mm pour les minutes et MM pour le mois
Une fois que vous avez analysé la date, j'utilise cette fonction pour ajouter 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 ne correspond pas toujours à 24 heures (ajustements de type heure avancée, secondes intercalaires, etc.), Calendar
est recommandé pour cela.
Travaille 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)