web-dev-qa-db-fra.com

Vérifier la date avec la date d'aujourd'hui

J'ai écrit du code pour vérifier deux dates, une date de début et une date de fin. Si la date de fin est antérieure à la date de début, une invite indique que la date de fin est antérieure à la date de début.

Je souhaite également ajouter une vérification pour savoir si la date de début est antérieure à aujourd'hui (aujourd'hui comme le jour où l'utilisateur utilise l'application). Comment dois-je procéder? (Code de vérification de la date ci-dessous, tout cela est également écrit pour Android si cela a une incidence)

if (startYear > endYear) {
    fill = fill + 1;
    message = message + "End Date is Before Start Date" + "\n";
} else if (startMonth > endMonth && startYear >= endYear) {
    fill = fill + 1;
    message = message + "End Date is Before Start Date" + "\n";
} else if (startDay > endDay && startMonth >= endMonth && startYear >= endYear) {
    fill = fill + 1;
    message = message + "End Date is Before Start Date" + "\n";
}
29
Zaask

Est-ce que cela aide?

Calendar c = Calendar.getInstance();

// set the calendar to start of today
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);

// and get that as a Date
Date today = c.getTime();

// or as a timestamp in milliseconds
long todayInMillis = c.getTimeInMillis();

// user-specified date which you are testing
// let's say the components come from a form or something
int year = 2011;
int month = 5;
int dayOfMonth = 20;

// reuse the calendar to set user specified date
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month);
c.set(Calendar.DAY_OF_MONTH, dayOfMonth);

// and get that as a Date
Date dateSpecified = c.getTime();

// test your condition
if (dateSpecified.before(today)) {
  System.err.println("Date specified [" + dateSpecified + "] is before today [" + today + "]");
} else {
  System.err.println("Date specified [" + dateSpecified + "] is NOT before today [" + today + "]");
}
43
sudocode

Ne vous compliquez pas trop. Utilisez ce moyen simple. Importez DateUtils Java et appelez les méthodes suivantes qui renvoient un booléen.

DateUtils.isSameDay(date1,date2);
DateUtils.isSameDay(calender1,calender2);
DateUtils.isToday(date1);

Pour plus d'informations, reportez-vous à cet article DateUtils Java

114
Kishath

Android a déjà une classe dédiée pour cela. Vérifiez DateUtils.isToday (long when)

8
makata

Les autres réponses ignorent la question cruciale de fuseau horaire .

Les autres réponses utilisent des classes dépassées.

Évitez les anciennes classes de date-heure

Les anciennes classes de date-heure regroupées avec les premières versions de Java sont mal conçues, déroutantes et gênantes. Évitez Java.util.Date/.Calendar et les classes connexes.

Java.time

LocalDate

Pour les valeurs de date uniquement, sans heure et sans fuseau horaire, utilisez la classe LocalDate .

LocalDate start = LocalDate.of( 2016 , 1 , 1 );
LocalDate stop = start.plusWeeks( 1 );

Fuseau horaire

Sachez que tandis que LocalDate ne fait pas stocker un fuseau horaire, déterminant une date telle que "aujourd'hui" nécessite un fuseau horaire. Pour un moment donné, la date peut varier dans le monde par fuseau horaire. Par exemple, un nouveau jour se lève plus tôt à Paris qu'à Montréal. Un moment après minuit à Paris, c'est encore "hier" à Montréal.

Si tout ce que vous avez est un offset-from-UTC , utilisez ZoneOffset . Si vous avez un fuseau horaire complet (continent/région), utilisez alors ZoneId . Si vous voulez UTC, utilisez la constante pratique ZoneOffset.UTC .

ZoneId zoneId = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( zoneId );

La comparaison est facile avec les méthodes isEqual, isBefore et isAfter.

boolean invalidInterval = stop.isBefore( start );

Nous pouvons vérifier si la date d'aujourd'hui est comprise dans cette plage de dates. Dans ma logique illustrée ici, j'utilise l'approche Half-Open où le début est inclus tandis que la fin est exclusif. Cette approche est courante dans le travail date-heure. Ainsi, par exemple, une semaine se déroule d'un lundi allant jusqu'au lundi suivant non compris.

// Is today equal or after start (not before) AND today is before stop.
boolean intervalContainsToday = ( ! today.isBefore( start ) ) && today.isBefore( stop ) ) ;

Interval

Si vous travaillez intensivement avec de telles périodes de temps, pensez à ajouter la bibliothèque ThreeTen-Extra à votre projet. Cette bibliothèque étend le cadre Java.time et constitue le terrain d'essai pour d'éventuels ajouts à Java.time.

ThreeTen-Extra comprend une classe Interval avec des méthodes pratiques telles que abuts, contains, encloses, overlaps, etc.


À propos de Java.time

Le cadre Java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent l'ancien hérité) gênant classes date-heure telles que Java.util.Date , Calendar , & SimpleDateFormat .

Le projet Joda-Time , maintenant en mode maintenance , conseille la migration vers les classes Java.time .

Pour en savoir plus, consultez le Tutoriel Oracle . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 31 .

Vous pouvez échanger des objets Java.time directement avec votre base de données. Utilisez un pilote JDBC compatible avec JDBC 4.2 ou version ultérieure. Pas besoin de chaînes, pas besoin de Java.sql.* Des classes.

Où obtenir les classes Java.time?

5
Basil Bourque
public static boolean isToday(Date date){
    Calendar today = Calendar.getInstance();
    Calendar specifiedDate  = Calendar.getInstance();
    specifiedDate.setTime(date);

    return today.get(Calendar.DAY_OF_MONTH) == specifiedDate.get(Calendar.DAY_OF_MONTH)
            &&  today.get(Calendar.MONTH) == specifiedDate.get(Calendar.MONTH)
            &&  today.get(Calendar.YEAR) == specifiedDate.get(Calendar.YEAR);
}
5
Roberto Rodriguez

En utilisant Joda Time cela peut être simplifié pour:

DateMidnight startDate = new DateMidnight(startYear, startMonth, startDay);
if (startDate.isBeforeNow())
{
    // startDate is before now
    // do something...
}
5
martin

pour vérifier si une date est la date du jour ou non seulement vérifier les dates non incluses dans l'heure, alors prenez l'heure 00:00:00 et utilisez le code ci-dessous

    Calendar c = Calendar.getInstance();

    // set the calendar to start of today
    c.set(Calendar.HOUR_OF_DAY, 0);
    c.set(Calendar.MINUTE, 0);
    c.set(Calendar.SECOND, 0);
    c.set(Calendar.MILLISECOND, 0);

    Date today = c.getTime();

    // or as a timestamp in milliseconds
    long todayInMillis = c.getTimeInMillis();


    int dayOfMonth = 24;
    int month = 4;
    int year =2013;

    // reuse the calendar to set user specified date
    c.set(Calendar.YEAR, year);
    c.set(Calendar.MONTH, month - 1);
    c.set(Calendar.DAY_OF_MONTH, dayOfMonth);
    c.set(Calendar.HOUR_OF_DAY, 0);
    c.set(Calendar.MINUTE, 0);
    c.set(Calendar.SECOND, 0);
    c.set(Calendar.MILLISECOND, 0);
    // and get that as a Date
    Date dateSpecified = c.getTime();

    // test your condition
    if (dateSpecified.before(today)) {

        Log.v(" date is previou")
    } else if (dateSpecified.equal(today)) {

        Log.v(" date is today ")
    } 
             else if (dateSpecified.after(today)) {

        Log.v(" date is future date ")
    } 

J'espère que cela vous aidera ....

4
Milan Shukla
    boolean isBeforeToday(Date d) {
        Date today = new Date();
        today.setHours(0);
        today.setMinutes(0);
        today.setSeconds(0);
        return d.before(today);
    }
2
Vladimir.Shramov

une autre façon de faire cette opération:

public class TimeUtils {

    /**
     * @param timestamp
     * @return
     */
    public static boolean isToday(long timestamp) {
        Calendar now = Calendar.getInstance();
        Calendar timeToCheck = Calendar.getInstance();
        timeToCheck.setTimeInMillis(timestamp);
        return (now.get(Calendar.YEAR) == timeToCheck.get(Calendar.YEAR)
                && now.get(Calendar.DAY_OF_YEAR) == timeToCheck.get(Calendar.DAY_OF_YEAR));
    }

}
1
carlol

Je suppose que vous utilisez des nombres entiers pour représenter votre année, votre mois et votre jour? Si vous souhaitez rester cohérent, utilisez les méthodes Date.

Calendar cal = new Calendar();
int currentYear, currentMonth, currentDay; 
currentYear = cal.get(Calendar.YEAR); 
currentMonth = cal.get(Calendar.MONTH); 
currentDay = cal.get(Calendar.DAY_OF_WEEK);

     if(startYear < currentYear)
                {
                    message = message + "Start Date is Before Today" + "\n";
                }
            else if(startMonth < currentMonth && startYear <= currentYear)
                    {
                        message = message + "Start Date is Before Today" + "\n";
                    }
            else if(startDay < currentDay && startMonth <= currentMonth && startYear <= currentYear)
                        {
                            message = message + "Start Date is Before Today" + "\n";
                        }
1
Mitch Salopek

Essaye ça:

public static boolean isToday(Date date)
{
    return org.Apache.commons.lang3.time.DateUtils.isSameDay(Calendar.getInstance().getTime(),date);
}
0
Spektakulatius
public static boolean itIsToday(long date){
    boolean result = false;
    try{
        Calendar calendarData = Calendar.getInstance();
        calendarData.setTimeInMillis(date);
        calendarData.set(Calendar.HOUR_OF_DAY, 0);
        calendarData.set(Calendar.MINUTE, 0);
        calendarData.set(Calendar.SECOND, 0);
        calendarData.set(Calendar.MILLISECOND, 0);

        Calendar calendarToday = Calendar.getInstance();
        calendarToday.setTimeInMillis(System.currentTimeMillis());
        calendarToday.set(Calendar.HOUR_OF_DAY, 0);
        calendarToday.set(Calendar.MINUTE, 0);
        calendarToday.set(Calendar.SECOND, 0);
        calendarToday.set(Calendar.MILLISECOND, 0);

        if(calendarToday.getTimeInMillis() == calendarData.getTimeInMillis()) {
            result = true;
        }
    }catch (Exception exception){
        Log.e(TAG, exception);
    }
    return result;
}