J'ai un objet Date dans Java stocké en tant que type Date de Java.
J'ai aussi une date de création du calendrier grégorien. La date du calendrier grégorien n'a pas de paramètre et est donc une instance de la date du jour (et de l'heure?).
Avec la date Java, je souhaite 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 du calendrier gregoriancal.
J'ai vu qu'au moment où la date Java était stockée longtemps et que les seules méthodes disponibles semblaient simplement écrire le long comme une chaîne de date formatée. Existe-t-il un moyen d'accéder à l'année, au mois, au jour, etc.?
J'ai vu que les méthodes getYear()
, getMonth()
, etc. pour la classe Date
étaient obsolètes. Je me demandais quelle était la meilleure pratique pour utiliser l'instance de date Java que j'ai avec la date GregorianCalendar
.
Mon objectif final est de faire un calcul de date afin de pouvoir vérifier que la date Java se trouve dans de nombreuses heures, minutes, etc., de la date et de l'heure du jour.
Je suis toujours un débutant pour Java et cela me laisse un peu perplexe.
Utilisez quelque chose comme:
Date date; // your date
// Choose time zone in which you want to interpret your Date
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("Europe/Paris"));
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, pas 1.
Edit : Puisque 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 le faire.
Avec Java 8 et versions ultérieures, vous pouvez convertir l'objet Date en un objet 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 de 1 à 12.
Vous pourriez faire quelque chose comme ceci, cela expliquera le fonctionnement de la classe Date
.
String currentDateString = "02/27/2012 17:00:00";
SimpleDateFormat sd = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
Date currentDate = sd.parse(currentDateString);
String yourDateString = "02/28/2012 15:00:00";
SimpleDateFormat yourDateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
Date yourDate = yourDateFormat.parse(yourDateString);
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 de calendrier) est dix fois plus rapide. Maintenant, vous avez aaaa MM jj 00 00 00, puis comparez avec 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");
String currentDay = formatNowDay.format(date1);
String currentMonth = formatNowMonth.format(date1);
String currentYear = formatNowYear.format(date1);
Date queueDate = new SimpleDateFormat("yyyy-MM-dd").parse(inputDtStr);
Calendar queueDateCal = Calendar.getInstance();
queueDateCal.setTime(queueDate);
if(queueDateCal.get(Calendar.DAY_OF_YEAR)==Calendar.getInstance().get(Calendar.DAY_OF_YEAR))
{
"same day of the year!";
}