Je veux obtenir l’année, le mois, le jour, etc. à partir de Java Date pour les comparer avec la date du calendrier grégorien en Java. Est-ce possible?

J’ai un object Date en Java stocké en tant que type de date Java.

J’ai aussi une date de création d’un calendrier grégorien. La date du calendrier grégorien n’a pas de parameters et est donc une instance de la date et de l’heure d’aujourd’hui.

Avec la date java, je veux pouvoir obtenir l’année, le mois, le jour, l’heure, les minutes et les secondes à partir du type de date Java et comparer la date de fin d’année.

J’ai vu qu’au moment où la date de Java est stockée comme une longue et que les seules méthodes disponibles semblent simplement écrire la longue comme une chaîne de date formatée. Y a-t-il un moyen d’accéder à l’année, au mois, au jour, etc.?

J’ai vu que les getYear() , getMonth() , etc. de la classe Date étaient obsolètes. Je me demandais quelle est la meilleure pratique pour utiliser l’instance Java Date que j’ai avec la date GregorianCalendar .

Mon but ultime est de faire un calcul de date afin que je puisse vérifier que la date de Java se situe dans un nombre d’heures, de minutes, etc.

Je suis toujours un débutant à Java et cela me laisse un peu perplexe.

Utilisez quelque chose comme:

 Date date; // your date Calendar cal = Calendar.getInstance(); cal.setTime(date); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH); int day = cal.get(Calendar.DAY_OF_MONTH); // etc. 

Attention, les mois commencent à 0 et non à 1.

Edit : Depuis Java 8, il est préférable d’utiliser java.time.LocalDate plutôt que java.util.Calendar . Voir cette réponse pour savoir comment faire.

Avec Java 8 et versions ultérieures, vous pouvez convertir l’object Date en object LocalDate , puis obtenir facilement l’année, le mois et le jour.

 Date date = new Date(); LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); int year = localDate.getYear(); int month = localDate.getMonthValue(); int day = localDate.getDayOfMonth(); 

Notez que getMonthValue() renvoie une valeur int getMonthValue() entre 1 et 12.

Ou vous pourriez faire quelque chose comme ça. Il expliquera comment fonctionne la classe “Date”.

  Ssortingng currentDateSsortingng = "02/27/2012 17:00:00"; SimpleDateFormat sd = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss"); Date currentDate = sd.parse(currentDateSsortingng); Ssortingng yourDateSsortingng = "02/28/2012 15:00:00"; SimpleDateFormat yourDateFormat = new SimpleDateFormat( "MM/dd/yyyy HH:mm:ss"); Date yourDate = yourDateFormat.parse(yourDateSsortingng); if (yourDate.after(currentDate)) { System.out.println("After"); } else if(yourDate.equals(currentDate){ System.out.println("Same"); }else{ System.out.println("Before"); } 
  Date date = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEEE"); System.out.println("DAY "+simpleDateFormat.format(date).toUpperCase()); simpleDateFormat = new SimpleDateFormat("MMMM"); System.out.println("MONTH "+simpleDateFormat.format(date).toUpperCase()); simpleDateFormat = new SimpleDateFormat("YYYY"); System.out.println("YEAR "+simpleDateFormat.format(date).toUpperCase()); 

EDIT: La sortie pour date = Fri Jun 15 09:20:21 CEST 2018 est:

 DAY FRIDAY MONTH JUNE YEAR 2018 
 private boolean isSameDay(Date date1, Date date2) { Calendar calendar1 = Calendar.getInstance(); calendar1.setTime(date1); Calendar calendar2 = Calendar.getInstance(); calendar2.setTime(date2); boolean sameYear = calendar1.get(Calendar.YEAR) == calendar2.get(Calendar.YEAR); boolean sameMonth = calendar1.get(Calendar.MONTH) == calendar2.get(Calendar.MONTH); boolean sameDay = calendar1.get(Calendar.DAY_OF_MONTH) == calendar2.get(Calendar.DAY_OF_MONTH); return (sameDay && sameMonth && sameYear); } 
 @Test public void testDate() throws ParseException { long start = System.currentTimeMillis(); long round = 100000l; for (int i = 0; i < round; i++) { StringUtil.getYearMonthDay(new Date()); } long mid = System.currentTimeMillis(); for (int i = 0; i < round; i++) { StringUtil.getYearMonthDay2(new Date()); } long end = System.currentTimeMillis(); System.out.println(mid - start); System.out.println(end - mid); } public static Date getYearMonthDay(Date date) throws ParseException { SimpleDateFormat f = new SimpleDateFormat("yyyyyMMdd"); String dateStr = f.format(date); return f.parse(dateStr); } public static Date getYearMonthDay2(Date date) throws ParseException { Calendar c = Calendar.getInstance(); c.setTime(date); c.set(Calendar.SECOND, 0); c.set(Calendar.MINUTE, 0); c.set(Calendar.HOUR_OF_DAY, 0); return c.getTime(); } public static int compare(Date today, Date future, Date past) { Date today1 = StringUtil.getYearMonthDay2(today); Date future1 = StringUtil.getYearMonthDay2(future); Date past1 = StringUtil.getYearMonthDay2(past); return today.compare // or today.after or today.before } 

getYearMonthDay2 (la solution du calendrier) est dix fois plus rapide. Maintenant vous avez aaaa MM jj 00 00 00, puis comparez en utilisant date.compare

Ça pourrait être plus facile

  Date date1 = new Date("31-May-2017"); OR java.sql.Date date1 = new java.sql.Date((new Date()).getTime()); SimpleDateFormat formatNowDay = new SimpleDateFormat("dd"); SimpleDateFormat formatNowMonth = new SimpleDateFormat("MM"); SimpleDateFormat formatNowYear = new SimpleDateFormat("YYYY"); Ssortingng currentDay = formatNowDay.format(date1); Ssortingng currentMonth = formatNowMonth.format(date1); Ssortingng currentYear = formatNowYear.format(date1); 

Soyez soigneusement monté à partir de 0 et non pas 1. Et aussi, Calendar utilise pm comme je suis, donc soyez très prudent lorsque vous utilisez Hours and minutes.

 Date your_date; Calendar cal = Calendar.getInstance(); cal.setTime(your_date); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MINUTE);