227 votes

Comment créer un objet Java Date de minuit aujourd'hui et demain à minuit ?

Dans mon code j'ai besoin de trouver toutes mes choses qui s'est passé aujourd'hui. J'ai donc besoin de comparer des dates à partir d'aujourd'hui à 00:00 (minuit tôt ce matin) à 12:00 (minuit ce soir).

Je sais ...

Date today = new Date(); 

... moi en ce moment. Et ...

Date beginning = new Date(0);

... me met à zéro heure le 1er janvier 1970. Mais ce qui est un moyen facile d'obtenir zéro de temps aujourd'hui et zéro temps demain?

Toute aide est grandement appréciée!

Mise à JOUR; j'ai fait cela, mais il y a certainement un moyen plus facile??

Calendar calStart = new GregorianCalendar();
calStart.setTime(new Date());
calStart.set(Calendar.HOUR_OF_DAY, 0);
calStart.set(Calendar.MINUTE, 0);
calStart.set(Calendar.SECOND, 0);
calStart.set(Calendar.MILLISECOND, 0);
Date midnightYesterday = calStart.getTime();

Calendar calEnd = new GregorianCalendar();
calEnd.setTime(new Date());
calEnd.set(Calendar.DAY_OF_YEAR, calEnd.get(Calendar.DAY_OF_YEAR)+1);
calEnd.set(Calendar.HOUR_OF_DAY, 0);
calEnd.set(Calendar.MINUTE, 0);
calEnd.set(Calendar.SECOND, 0);
calEnd.set(Calendar.MILLISECOND, 0);
Date midnightTonight = calEnd.getTime();

414voto

timaschew Points 3444
<h1>java.util.Calendar<pre><code></code></pre><h1>Joda-temps</h1><p><a href="http://www.joda.org/joda-time/">Joda Time</a> a une API plus agréable :<strike></strike></p><pre><code></code></pre><h2></h2><p>Depuis la version 2.3 de Joda temps <code></code> est <strong>déconseillé</strong>, donc utiliser ceci :</p><pre><code></code></pre><p>Passer d’un fuseau horaire si vous ne voulez pas par défaut fuseau horaire de la JVM.</p><pre><code></code></pre></h1>

39voto

Andrei Volgin Points 13110

La meilleure façon de trouver un minuit :

Jour suivant :

33voto

Tomasz Nurkiewicz Points 140462

Rappelez-vous, Date n'est pas utilisé pour représenter les dates (!). Pour représenter la date vous avez besoin d'un calendrier. Ce:

Calendar c = new GregorianCalendar();

va créer un Calendar instance représentant présent la date dans votre fuseau horaire. Maintenant, ce que vous avez besoin est de tronquer chaque champ ci-dessous la journée (heures, minutes, secondes et millisecondes) par le paramètre 0. Vous avez maintenant une minuit aujourd'hui.

Maintenant pour obtenir minuit le jour suivant, vous avez besoin d'ajouter un jour:

c.add(Calendar.DAY_OF_MONTH, 1);

Notez que l'ajout d' 86400 secondes ou 24 heures est incorrect en raison de l'heure d'été qui pourraient se produire dans l'intervalle.

Mise à JOUR: Cependant mon préféré façon de traiter ce problème est d'utiliser DateUtils classe de Commons Lang:

Date start = DateUtils.truncate(new Date(), Calendar.DAY_OF_MONTH))
Date end = DateUtils.addDays(start, 1);

Il utilise Calendar derrière les coulisses...

9voto

Stephan Points 10596

Comme de JodaTime 2.3, l' toDateMidnight() est obsolète.

De Mise à niveau à partir de 2.2 à 2.3

 Désapprobations depuis la 2.2
----------------------
 - DateMidnight [no 41]
 Cette classe est viciée dans son concept
 L'heure de minuit, parfois ne se produit pas dans certains fuseaux horaires
 C'est un résultat de l'heure d'été à partir de 00:00 à 01:00
 DateMidnight est essentiellement un DateTime avec un temps enfermé à minuit
 Un tel concept est plus généralement une mauvaise utilisation, compte tenu de LocalDate
 Remplacer DateMidnight avec LocalDate
 Ou de le remplacer avec DateTime, peut-être à l'aide de la withTimeAtStartOfDay() la méthode

Voici un exemple de code sans toDateMidnight() méthode.

Code

DateTime todayAtMidnight = new DateTime().withTimeAtStartOfDay();
System.out.println(todayAtMidnight.toString("yyyy-MM-dd HH:mm:ss"));

De sortie (peut être différent en fonction de votre fuseau horaire local)

2013-09-28 00:00:00

6voto

rogerdpack Points 12806

Cela semble être une option :

pour ajouter une journée, soit

ou

J’ai comme l’impression ces derniers il est préférable dans le cas de quelque chose de bizarre comme la lumière du jour d’épargne causant ajoutant 24 heures pour ne pas être assez (voir http://stackoverflow.com/a/4336131/32453 et ses autres réponses).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X