Obtenez la date d’aujourd’hui à Java à minuit

Je dois créer deux objects de date. Si la date et l’heure sont le 9 mars 2012 à 11h30, alors

  • l’object date d1 devrait être le 9 mars 2012 à midi
  • l’object date d2 doit contenir la date actuelle elle-même

La date ne sera pas entrée, c’est la date du système.

Mise à jour :

Date dt = new Date(); System.out.print(dt.toSsortingng()); 

donne la date et l’heure actuelles

  Calendar c = new GregorianCalendar(); c.set(Calendar.HOUR_OF_DAY, 0); //anything 0 - 23 c.set(Calendar.MINUTE, 0); c.set(Calendar.SECOND, 0); Date d1 = c.getTime(); //the midnight, that's the first second of the day. 

devrait être ven mars 09 00:00:00 IST 2012

 Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm"); System.out.println(sdf.format(date)); 

Voici une solution basée sur Java 8, utilisant le nouveau package java.time ( Tutorial ).

Si vous pouvez utiliser des objects Java 8 dans votre code , utilisez LocalDateTime :

 LocalDateTime now = LocalDateTime.now(); // current date and time LocalDateTime midnight = now.toLocalDate().atStartOfDay(); 

Si vous avez besoin de dates héritées, par exemple java.util.Date :

Convertissez le LocalDateTime vous avez créé ci-dessus en Date utilisant ces conversions:

LocalDateTime -> ZonedDateTime -> Instant -> Date

  1. Appelez atZone(zone) avec un atZone(zone) spécifié (ou ZoneId.systemDefault() pour le fuseau horaire par défaut du système) pour créer un object ZonedDateTime , ajusté en fonction de l’ heure d’ été si nécessaire.

     ZonedDateTime zdt = midnight.atZone(ZoneId.of("America/Montreal")); 
  2. Appelez toInstant() pour convertir le ZonedDateTime en Instant :

     Instant i = zdt.toInstant() 
  3. Enfin, appelez Date.from(instant) pour convertir l’ Instant en Date :

     Date d1 = Date.from(i) 

En résumé, cela ressemblera à ceci pour vous:

 LocalDateTime now = LocalDateTime.now(); // current date and time LocalDateTime midnight = now.toLocalDate().atStartOfDay(); Date d1 = Date.from(midnight.atZone(ZoneId.systemDefault()).toInstant()); Date d2 = Date.from(now.atZone(ZoneId.systemDefault()).toInstant()); 

Reportez-vous également à la section Code de date et heure hérité (les didacticiels Java ™) pour l’interopérabilité de la nouvelle fonctionnalité java.time avec les anciennes classes java.util .

 Calendar currentDate = Calendar.getInstance(); //Get the current date SimpleDateFormat formatter= new SimpleDateFormat("yyyy/MMM/dd HH:mm:ss"); //format it as per your requirement Ssortingng dateNow = formatter.format(currentDate.getTime()); System.out.println("Now the date is :=> " + dateNow); 

Si vous pouvez append des bibliothèques externes à votre projet. Je vous recommande d’essayer Joda-time. Il a une manière très intelligente de travailler avec les dates.

http://joda-time.sourceforge.net/

Pour la date et l’heure actuelles:

 Ssortingng mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime()); 

Cela montrera comme:

5 février 2013 12h40:24

Une solution dans Java 8 :

 Date startOfToday = Date.from(ZonedDateTime.now().with(LocalTime.MIN).toInstant()); 
 private static Date truncateTime(Calendar cal) { cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); return new Date(cal.getTime().getTime()); } public static void main(Ssortingng[] args) throws Exception{ Date d2 = new Date(); GregorianCalendar cal = new GregorianCalendar(); cal.setTime(d2); Date d1 = truncateTime( cal ); System.out.println(d1.toSsortingng()); System.out.println(d2.toSsortingng()); } 
 DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); Date date = new Date(); System.out.println(dateFormat.format(date)); //2014/08/06 15:59:4 

Utiliser org.apache.commons.lang3.time.DateUtils

 Date pDate = new Date(); DateUtils.truncate(pDate, Calendar.DAY_OF_MONTH); 

Voici un moyen Java 8 pour obtenir UTC Midnight in millis

 ZonedDateTime utcTime = ZonedDateTime.now(ZoneOffset.UTC); long todayMidnight = utcTime.toLocalDate().atStartOfDay().toEpochSecond(ZoneOffset.UTC) * 1000; 

Définir ‘minuit’

Le mot «minuit» est difficile à définir.

Certains pensent que c’est le moment avant le début d’ une nouvelle journée. Essayer de représenter cela dans un logiciel aussi délicat que le dernier moment de la journée peut toujours être subdivisé en une fraction de seconde.

Je suggère qu’une meilleure façon de penser à cela est d’obtenir le «premier moment de la journée».

Cela prend en charge l’approche couramment utilisée consistant à définir une période de temps comme «Half-Open», où le début est inclusif alors que la fin est exclusive. Ainsi, une journée entière commence avec le premier moment de la journée et se termine au premier moment du jour suivant . Une journée complète le souhaiterait (notez la date du 3 au 4):

2016-02-03T00: 00: 00.0-08: 00 [America / Los_Angeles] /2016-02-04T00:00:00.0-08:00 [America / Los_Angeles]

Joda-Time

Si vous utilisez la bibliothèque Joda-Time , appelez withTimeAtStartOfDay .

Notez comment nous spécifions le fuseau horaire. S’il est omis, le fuseau horaire par défaut de la JVM est implicitement appliqué. Mieux vaut être explicite.

 DateTime todayStart = DateTime.now( DateTimeZone.forID( "America/Montreal" ) ).withTimeAtStartOfDay() ; 

Si vous utilisez Java 8 ou une version ultérieure, mieux vaut utiliser le package java.time intégré à Java. Voir frères et soeurs Réponse de Jens Hoffman.