Подтвердить что ты не робот

Дата проверки с сегодняшней датой

Я написал некоторый код для проверки двух дат, даты начала и даты окончания. Если дата окончания предшествует дате начала, будет выдано сообщение о том, что дата окончания предшествует дате начала.

Я также хочу добавить проверку того, является ли дата начала до сегодняшнего дня (сегодня, как в день, когда пользователь использует приложение). Как мне это сделать? (Код проверки даты ниже, также все это написано для Android, если это имеет какое-либо отношение)

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";
}
4b9b3361

Ответ 1

Помогает ли это?

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 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 + "]");
}

Ответ 2

Не слишком усложняйте это. Используйте этот простой способ. Импортируйте DateUtils java класс и вызовите следующие методы, которые возвращают логическое значение.

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

Для получения дополнительной информации обратитесь к этой статье DateUtils Java

Ответ 4

Используя Joda Time, можно упростить:

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

Ответ 5

Другие ответы игнорируют критическую проблему часового пояса.

Другие ответы используют устаревшие классы.

Избегайте старых классов даты и времени

Старые классы даты и времени, включенные в ранние версии Java, плохо разработаны, сбивают с толку и создают проблемы. Избегайте java.util.Date/.Calendar и связанных классов.

java.time

LocalDate

Для значений только для даты, без времени суток и без часового пояса, используйте класс LocalDate.

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

часовой пояс

Имейте в виду, что хотя LocalDate не хранит часовой пояс, для определения даты, такой как "сегодня", требуется часовой пояс. В любой момент времени дата может варьироваться в зависимости от часового пояса. Например, в Париже новый день наступает раньше, чем в Монреале. Момент после полуночи в Париже все еще "вчера" в Монреале.

Если у вас есть смещение от UTC, используйте ZoneOffset. Если у вас полный часовой пояс (континент/регион), используйте ZoneId. Если вы хотите использовать UTC, используйте удобную константу ZoneOffset.UTC.

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

Сравнение легко с методами isEqual, isBefore и isAfter.

boolean invalidInterval = stop.isBefore( start );

Мы можем проверить, содержится ли сегодняшний день в этом диапазоне дат. В моей логике, показанной здесь, я использую подход Half-Open, где начало включительно, а окончание - эксклюзивно. Такой подход распространен в работе с датой и временем. Так, например, неделя начинается с понедельника до, но не включая следующий понедельник.

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

Interval

Если вы интенсивно работаете с такими промежутками времени, рассмотрите возможность добавления библиотеки ThreeTen-Extra в свой проект. Эта библиотека расширяет фреймворк java.time и является полигоном для возможных дополнений к java.time.

ThreeTen-Extra включает в себя класс Interval с удобными методами, такими как abuts, contains, encloses, overlaps и т.д.


О java.time

Среда java.time встроена в Java 8 и более поздние версии. Эти классы вытесняют проблемные старые устаревшие классы даты и времени, такие как java.util.Date, Calendar и & SimpleDateFormat.

Проект Joda-Time, который теперь находится в режиме обслуживания, рекомендует выполнить переход на классы java.time.

Чтобы узнать больше, см. Учебное пособие по Oracle. И поищите в Кару множество примеров и объяснений. Спецификация: JSR 310.

Вы можете обмениваться объектами java.time напрямую с вашей базой данных. Используйте драйвер JDBC, совместимый с JDBC 4.2 или более поздней версией. Нет необходимости в строках, нет необходимости в классах java.sql.*.

Где взять классы java.time?

  • Java SE 8, Java SE 9, Java SE 10 и более поздние версии
    • Встроенный.
    • Часть стандартного Java API со встроенной реализацией.
    • Java 9 добавляет некоторые мелкие функции и исправления.
  • Java SE 6 и Java SE 7
    • Большая часть функциональности java.time перенесена на Java 6 & 7 в ThreeTen-Backport.
  • Android

Ответ 6

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);
}

Ответ 7

чтобы проверить, соответствует ли дата сегодняшней дате или не только проверять даты, не включенные в это время, так что время 00:00:00 и использовать код ниже

    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 ")
    } 

Надеюсь, это поможет...

Ответ 8

    boolean isBeforeToday(Date d) {
        Date today = new Date();
        today.setHours(0);
        today.setMinutes(0);
        today.setSeconds(0);
        return d.before(today);
    }

Ответ 9

Я предполагаю, что вы используете целые числа для представления своего года, месяца и дня? Если вы хотите оставаться последовательным, используйте методы 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";
                        }

Ответ 10

другой способ выполнить эту операцию:

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));
    }

}

Ответ 11

Попробуйте следующее:

public static boolean isToday(Date date)
{
    return org.apache.commons.lang3.time.DateUtils.isSameDay(Calendar.getInstance().getTime(),date);
}

Ответ 12

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;
}