Obtenir la date d’aujourd’hui en Java – J’ai essayé les méthodes habituelles

J’ai besoin de la date d’aujourd’hui et de rien d’autre (“05/06/08 00:00:00”)

J’ai essayé

Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR, 0); Date date1 = calendar.getTime(); System.out.println(date1); 

Run: (Ceci est sérieusement foiré)

Si l’heure indiquée sur l’ordinateur est <12h00 à midi: dim. Mars 08 00:44:39 IST 2009

Si l’heure sur l’ordinateur est> 12h00 à midi: dim. Mars 08 12:46:53 IST 2009

Alors j’ai abandonné ça.

Tous les setters de Date sont obsolètes (à l’exception de l’époque) – donc je ne veux pas les utiliser non plus

La seule chose à laquelle je pouvais penser est

 Calendar calendar = Calendar.getInstance(); SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); Ssortingng sDate = dateFormat.format(calendar.getTime()); Date today = dateFormat.parse(sDate); 

Mais c’est un code tellement boiteux que je ne peux pas me résoudre à l’écrire.

Une autre option?

Merci!

Mon conseil habituel pour les questions de date / heure Java: n’utilisez pas java.util.{Calendar,Date} . Utilisez Joda Time . De cette façon, vous pouvez représenter une date en tant que date (sans fuseau horaire associé), au lieu d’une date / heure. Ou vous pouvez utiliser un DateMidnight si c’est ce que vous voulez représenter. (Faites attention aux combinaisons de fuseau horaire et de date où il n’y a pas de minuit, cependant …)

De quoi avez-vous besoin pour utiliser la Date ? Si vous pouvez changer en utilisant Joda, c’est génial. Sinon, vous pouvez utiliser Joda pour faire ce que vous voulez, puis convertir en millisecondes (puis en java.util.Date ) lorsque vous en avez vraiment besoin.

(La solution de Michael lors de l’utilisation de Date / Calendar est très bien si vous voulez vraiment vous en tenir à une API cassée … mais je ne peux pas surestimer à quel point Joda est meilleur …)

J’utilise ceci:

 public static Date startOfDay(Date date) { Calendar dCal = Calendar.getInstance(); dCal.setTime(date); dCal.set(Calendar.HOUR_OF_DAY, 0); dCal.set(Calendar.MINUTE, 0); dCal.set(Calendar.SECOND, 0); dCal.set(Calendar.MILLISECOND, 0); return dCal.getTime(); } 

Vous devez utiliser HOUR_OF_DAY au lieu de HOUR et le combiner avec MINUTE et SECOND également.

 import java.util.Calendar; import static java.util.Calendar.HOUR_OF_DAY; import static java.util.Calendar.MINUTE; import static java.util.Calendar.SECOND; import static java.util.Calendar.MILLISECOND; public class Today { public static void main( Ssortingng [] args ) { Calendar cal = Calendar.getInstance(); cal.set( HOUR_OF_DAY, 0 ); cal.set( MINUTE, 0 ); cal.set( SECOND, 0 ); cal.set( MILLISECOND, 0 ); System.out.println( cal.getTime() ); } } 

Les résultats que vous obtenez sont dus à HOUR est utilisé pour AM / PM alors que HOUR_OF_DAY est de 24 heures.

HOUR_OF_DAY:

Numéro de champ pour get et set indiquant l’heure du jour. HOUR_OF_DAY est utilisé pour l’horloge de 24 heures. Par exemple, à 10h04: 15h50, le HOUR_OF_DAY a 22 ans.

HEURE:

Numéro de champ pour get et set indiquant l’heure du matin ou de l’après-midi. HEURE est utilisée pour l’horloge de 12 heures (0 – 11). Midi et minuit sont représentés par 0 et non pas par 12. Par exemple, à 10h04: 15h50, l’HEURE est 10h.

La composante heure n’est pas que des heures (et Calendar.HOUR est, comme vous l’avez remarqué, AM / PM). Vous devez définir tous les champs de temps sur 0: HOUR_OF_DAY, MINUTE, SECOND, MILLISECOND.

Voir commons-lang Apache DateUtils.truncate ()

Comme mentionné ci-dessus, vous devriez utiliser

 Calendar.HOUR_OF_DAY 

Par opposition à

 Calendar.HOUR 

Vous devez également effacer les autres champs ( Calendar.MINUTE , Calendar.SECOND et Calendar.MILLISECOND ) en les définissant sur zéro.

Désolé, il n’y a pas de moyen facile ici. Une douleur, et c’est pourquoi ils travaillent sur une nouvelle API pour Java 7 basée sur Joda Time, je crois.

… ou vous pouvez le faire à la manière d’un pirate informatique:

 long MS_PER_DAY = 86400000L; Date dateTime=new Date(); long offset = TimeZone.getDefault().getOffset(dateTime.getTime()); Date date= new Date(((dateTime.getTime()+offset)/MS_PER_DAY)*MS_PER_DAY-offset); 

Je sais que c’est une question très ancienne, qui n’est plus active, mais elle est apparue au sumt de la liste lorsque j’ai cherché Google.

Bien que tous les conseils soient très bons, je ne peux pas croire que personne n’ait simplement répondu:

 Date date = new Date(System.currentTimeMillis()); System.out.println(date); 

Ce qui revient effectivement, la date du jour.

Pourquoi la manipulation des cordes?

Ne pouvez-vous pas simplement définir les valeurs dont vous avez besoin sur l’object Calendrier avant la conversion en Date à l’aide de getTime ()?

Un autre vote pour JodaTime.

java.util.Date et Calendar sont si mauvais qu’ils sont cassés. (Et SimpleDateFormat est une foutaise aussi!)

Pour ce que cela vaut, Java 7 inclura une nouvelle bibliothèque de date / heure fortement basée sur JodaTime.