Date in =newDate();LocalDateTime ldt =LocalDateTime.ofInstant(in.toInstant(),ZoneId.systemDefault());Date out =Date.from(ldt.atZone(ZoneId.systemDefault()).toInstant());
Il s'agit de définir votre date personnalisée, au cas où vous ne voudriez pas tenir compte de la date actuelle
Jigar Joshi
11
La gestion des dates de Java est tellement gonflée!
digory doo
1
C'est une réponse vieille de 4 ans. de nouvelles modifications de l'API DateTime ont été apportées aux versions récentes de celui-ci. Je vais éditer la réponse
Date dateBefore30Days =DateUtils.addDays(newDate(),-30);
Bien sûr, ajoutez la commons-langdépendance pour ne faire que soustraire la date, ce n'est probablement pas une bonne option, mais si vous l'utilisez déjà, commons-langc'est un bon choix. Il y a aussi des méthodes pratiques pour addYears, addMonths, addWeekset ainsi de suite, jetez un oeil à l' api ici .
Java 8
Une autre possibilité est de profiter des nouveautés LocalDatede Java 8 en utilisant la minusDays(long days)méthode:
Il ne sert à rien d'utiliser LocalDateTimecar cette classe n'a pas de concept de fuseau horaire ni de décalage par rapport à UTC. Utilisez-le uniquement lorsque la zone / le décalage est inconnu ou non pertinent. Au lieu de cela, utilisez LocalDateet passez a ZoneIdlors de l'appel de sa nowméthode. Voir la bonne réponse de Jacob van Lingen.
Basil Bourque
1
@BasilBourque Après votre avis, je vérifie l'api et vous avez tout à fait raison, donc je mets à jour la réponse. Merci.
albciff
Brian Montellano aimerait faire un commentaire: il ne devrait pas y sen avoir DateUtils, c'est juste DateUtil.
Ole VV
@ OleV.V. Brian Montellano a tort, vous pouvez consulter la DateUtilsdocumentation
Albciff
33
Utilisez simplement ceci pour obtenir la date avant 300 jours, remplacez 300 par vos jours:
Date date =newDate();// Or where ever you get it fromDate daysAgo =newDateTime(date).minusDays(300).toDate();
Je dois dire API Java 8, pas 7. Et mentionner le package java.timepourrait aider. De plus, une discussion / explication est généralement attendue sur Stack Overflow plutôt qu'un simple extrait de code. Vous devez absolument expliquer Durationcar c'est la valeur ajoutée de votre réponse par rapport à celle de van Lingen .
Basil Bourque
Java 8 de cause, corrigé
Grigory Kislin
si proche, mais devrait être pour modifier un objet de date arbitraire, pas "maintenant"
bharal
9
Comme vous pouvez le voir ICI , vous pouvez faire beaucoup de manipulations. Voici un exemple montrant ce que vous pourriez faire!
DateFormat dateFormat =newSimpleDateFormat("yyyy/MM/dd HH:mm:ss");Calendar cal =Calendar.getInstance();//Add one day to current date.
cal.add(Calendar.DATE,1);System.out.println(dateFormat.format(cal.getTime()));//Substract one day to current date.
cal =Calendar.getInstance();
cal.add(Calendar.DATE,-1);System.out.println(dateFormat.format(cal.getTime()));/* Can be Calendar.DATE or
* Calendar.MONTH, Calendar.YEAR, Calendar.HOUR, Calendar.SECOND
*/
Je suggère de toujours passer le fuseau horaire optionnel (ou offset-from-UTC) à cette nowméthode. S'il est omis, le fuseau horaire par défaut actuel de la JVM est appliqué implicitement et silencieusement. Cette valeur par défaut est hors de votre contrôle et peut changer à tout moment, même pendant l' exécution. Exemple: LocalDate.now( ZoneId.of( "America/Montreal" ).
Basil Bourque
doit être sur un objet de date arbitraire selon la question, pas "maintenant"
bharal
1
J'ai créé une fonction pour faciliter la tâche.
Pendant 7 jours après la dateString: dateCalculate(dateString,"yyyy-MM-dd",7);
Pour obtenir 7 jours jusqu'à dateString: dateCalculate(dateString,"yyyy-MM-dd",-7);
publicstaticString dateCalculate(String dateString,String dateFormat,int days){Calendar cal =Calendar.getInstance();SimpleDateFormat s =newSimpleDateFormat(dateFormat);try{
cal.setTime(s.parse(dateString));}catch(ParseException e){
e.printStackTrace();}
cal.add(Calendar.DATE, days);return s.format(cal.getTime());}
La question implique des objets date-heure, pas de génération de chaînes. En passant, LocalDate.parse( "2017-01-23").plusWeeks( 1 )c'est plus simple que d'écrire votre propre méthode et est plus auto-documenté.
Basil Bourque
0
Vous pouvez facilement soustraire avec le calendrier avec SimpleDateFormat
java.util.Date
maintenant héritées , supplantées par les classes java.time .Réponses:
Java 8 et versions ultérieures
Avec le changement d'API de date et d'heure de Java 8, utilisez
LocalDate
De même, vous pouvez avoir
Reportez-vous à https://stackoverflow.com/a/23885950/260990 pour la traduction entre java.util.Date <--> java.time.LocalDateTime
Java 7 et versions antérieures
Utiliser
Calendar
laadd()
méthode dela source
java.util.Date
,java.util.Calendar
etjava.text.SimpleTextFormat
sont maintenant héritage , supplanté par les java.time classes. Voir le didacticiel d'Oracle .@JigarJoshi c'est la bonne réponse, et bien sûr aussi la recommandation @Tim à utiliser. joda-time .
Je veux seulement ajouter plus de possibilités pour soustraire des jours d'un
java.util.Date
.Apache-commons
Une possibilité est d'utiliser apache-commons-lang . Vous pouvez le faire
DateUtils
comme suit:Bien sûr, ajoutez la
commons-lang
dépendance pour ne faire que soustraire la date, ce n'est probablement pas une bonne option, mais si vous l'utilisez déjà,commons-lang
c'est un bon choix. Il y a aussi des méthodes pratiques pouraddYears
,addMonths
,addWeeks
et ainsi de suite, jetez un oeil à l' api ici .Java 8
Une autre possibilité est de profiter des nouveautés
LocalDate
de Java 8 en utilisant laminusDays(long days)
méthode:la source
LocalDateTime
car cette classe n'a pas de concept de fuseau horaire ni de décalage par rapport à UTC. Utilisez-le uniquement lorsque la zone / le décalage est inconnu ou non pertinent. Au lieu de cela, utilisezLocalDate
et passez aZoneId
lors de l'appel de sanow
méthode. Voir la bonne réponse de Jacob van Lingen.s
en avoirDateUtils
, c'est justeDateUtil
.DateUtils
documentationUtilisez simplement ceci pour obtenir la date avant 300 jours, remplacez 300 par vos jours:
Ici,
DateTime
estorg.joda.time.DateTime;
Date
estjava.util.Date
la source
API Java 8 Time:
la source
java.time
pourrait aider. De plus, une discussion / explication est généralement attendue sur Stack Overflow plutôt qu'un simple extrait de code. Vous devez absolument expliquerDuration
car c'est la valeur ajoutée de votre réponse par rapport à celle de van Lingen .Comme vous pouvez le voir ICI , vous pouvez faire beaucoup de manipulations. Voici un exemple montrant ce que vous pourriez faire!
la source
java.util.Date
,java.util.Calendar
etjava.text.SimpleDateFormat
sont maintenant héritées , supplantées par les classes java.time intégrées à Java 8 et versions ultérieures. Voir le didacticiel d'Oracle .Avec Java 8, c'est vraiment simple maintenant:
Un excellent guide de la nouvelle API peut être trouvé ici .
la source
now
méthode. S'il est omis, le fuseau horaire par défaut actuel de la JVM est appliqué implicitement et silencieusement. Cette valeur par défaut est hors de votre contrôle et peut changer à tout moment, même pendant l' exécution. Exemple:LocalDate.now( ZoneId.of( "America/Montreal" )
.J'ai créé une fonction pour faciliter la tâche.
Pendant 7 jours après la dateString:
dateCalculate(dateString,"yyyy-MM-dd",7);
Pour obtenir 7 jours jusqu'à dateString:
dateCalculate(dateString,"yyyy-MM-dd",-7);
la source
java.util.Date
,java.util.Calendar
etjava.text.SimpleDateFormat
qui sont maintenant héritage , supplanté par les java.time classes. Voir le didacticiel d'Oracle .LocalDate.parse( "2017-01-23").plusWeeks( 1 )
c'est plus simple que d'écrire votre propre méthode et est plus auto-documenté.Vous pouvez facilement soustraire avec le calendrier avec SimpleDateFormat
la source
la source