web-dev-qa-db-fra.com

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

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.

199
daveb

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.

498
Florent Guillaume

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.

64
Ortomala Lokni

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");
}
12
javaCity
    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
9
Az.MaYo
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);
}
4
evya
@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

2
Tiina

Ç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);
2
Abdur Rahman
    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!";
 }
1
rabi