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'essaye 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());
Valeur des newTime
changements 2011-50-07 17:50
mais cela devrait l'être 07-01-2011 17:50
.
Ça ajoute correctement les minutes mais ça change aussi de mois, je ne sais pas pourquoi!
Réponses:
Le problème pour vous est que vous utilisez
mm
. Vous devriez utiliserMM
.MM
est pour un mois etmm
pour des minutes. Essayez avecyyyy-MM-dd HH:mm
Autre approche:
Cela peut être aussi simple que cela (une autre option consiste à utiliser joda-time )
la source
vous pouvez utiliser la classe DateUtils dans le package org.apache.commons.lang3.time
la source
org.apache.commons.lang.time.DateUtils
Méthode pratique pour mettre en œuvre la réponse de @ Pangea:
la source
Afin d'éviter toute dépendance, vous pouvez utiliser java.util.Calendar comme suit:
Dans Java 8, nous avons une nouvelle API:
la source
Ceci est incorrectement spécifié:
Vous utilisez les minutes au lieu du mois (MM)
la source
tl; dr
java.time
Utilisez les excellentes classes java.time pour le travail date-heure. Ces classes remplacent les anciennes classes de date-heure gênantes telles que
java.util.Date
etjava.util.Calendar
.ISO 8601
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 rendre votre chaîne d'entrée conforme, remplacez l'ESPACE au milieu par un
T
.LocalDateTime
Analysez votre chaîne d'entrée en tant que
LocalDateTime
car elle ne contient aucune information sur le fuseau horaire ou le décalage par rapport à UTC.Ajoutez dix minutes.
Voir le code en direct sur IdeOne.com .
Cela
LocalDateTime
n'a pas de fuseau horaire, donc cela ne représente pas un point sur la chronologie. Appliquez un fuseau horaire pour traduire à un moment réel. Indiquez un nom de fuseau horaire approprié dans le formatcontinent/region
, tels queAmerica/Montreal
,Africa/Casablanca
ouPacific/Auckland
, ouAsia/Karachi
. N'utilisez jamais l'abréviation de 3 à 4 lettres telle queEST
ouIST
ouPKT
car ce ne sont pas de vrais fuseaux horaires, ni standardisés, ni même uniques (!).ZonedDateTime
Si vous connaissez le fuseau horaire prévu pour cette valeur, appliquez a
ZoneId
pour obtenir unZonedDateTime
.Anomalies
Pensez à ajouter ces dix minutes avant ou après l'ajout d'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 décalent l' heure de l'horloge murale .
Le fait d'ajouter 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.
Conseil: lorsque vous prévoyez un moment spécifique sur la chronologie, conservez toujours les informations de fuseau horaire . Ne perdez pas ces informations, comme vous l'avez fait avec vos données d'entrée. La valeur est-elle
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 par rapport à UTC (+05:00
), et mieux encore, le nom du fuseau horaire (Asia/Karachi
).Instant
Si vous voulez le même moment vu à travers l'objectif de UTC , extrayez un fichier
Instant
. LaInstant
classe représente un moment sur la chronologie en UTC avec une résolution de nanosecondes (jusqu'à neuf (9) chiffres d'une fraction décimale).Convertir
Évitez les anciennes classes de date-heure gênantes autant que possible. Mais si vous le devez, vous pouvez convertir. Appel de nouvelles méthodes ajoutées aux anciennes classes.
À propos de java.time
Le framework java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciens gênants hérités des classes date-heure tels que
java.util.Date
,Calendar
, etSimpleDateFormat
.Le projet Joda-Time , désormais 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 futurs ajouts à java.time. Vous trouverez peut - être des classes utiles ici, comme
Interval
,YearWeek
,YearQuarter
et plus .la source
Il y a une erreur dans le modèle de votre SimpleDateFormat. ça devrait être
la source
utiliser ce format,
mm pour les minutes et MM pour le mois
la source
Une fois que vous avez analysé la date, j'utilise cette fonction utilitaire pour ajouter des heures, des minutes ou des secondes:
Soyez prudent lorsque vous ajoutez de longues périodes, 1 jour n'est pas toujours 24 heures (ajustements de type heure d'été, secondes intercalaires, etc.),
Calendar
est recommandé pour cela.la source
Travaillez pour moi DateUtils
...
la source
Peut être fait sans les constantes (comme 3600000 ms soit 1h)
exemple d'utilisation:
la source
Juste pour quiconque est intéressé. Je travaillais sur un projet iOS qui nécessitait des fonctionnalités similaires, j'ai donc fini de porter la réponse de @jeznag pour swift
la source