Проверьте, что мое текущее время существует с 7:00 вечера до 10:00 утра в java android - PullRequest
1 голос
/ 04 мая 2020

Пример: мое текущее время = 8:25 вечера. Это означает, что текущее время внутри 7:00 вечера до 10:00 утра. Так, как я могу определить это и если внутри показать сообщение?

Это для ограничения времени ресторана. с 19:00 до 22:00 пользователь не может ничего заказывать.

 try {

        // Start Time
        String string1 = "07:00 PM";
        Date time1 = new SimpleDateFormat("hh:mm a").parse(string1);
        Calendar calendar1 = Calendar.getInstance();
        calendar1.setTime(time1);
        calendar1.add(Calendar.DATE, 1);


        // End Time
        String string2 = "10:00 AM";
        Date time2 = new SimpleDateFormat("hh:mm a").parse(string2);
        Calendar calendar2 = Calendar.getInstance();
        calendar2.setTime(time2);
        calendar2.add(Calendar.DATE, 1);


        // Get Current Time
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("hh:mm a");
        String currenttime = sdf.format(date);
        Date d = new SimpleDateFormat("hh:mm a").parse(currenttime);
        Calendar calendar3 = Calendar.getInstance();
        calendar3.setTime(d);
        calendar3.add(Calendar.DATE, 1);

        Date x = calendar3.getTime();
        if (x.after(calendar1.getTime()) && x.before(calendar2.getTime())) {
            System.out.println("Not possible to order now");
        }
        else
        {
            System.out.println("YES POSSIBLE");
        }
    } catch (ParseException e) {
        e.printStackTrace();
    }

Ответы [ 4 ]

1 голос
/ 04 мая 2020

tl; др

Использовать современные java .time класс, LocalTime.

( ! localTime.isBefore( LocalTime.of( 19 , 0 ) ) )  // Is not before the start… (meaning, is equal to or later than)
&&                                                  // …and… 
localTime.isBefore( LocalTime.of( 7 , 0 ) ) ;       // is before the end.

java .time

Никогда не используйте Calendar или Date классы. Эти ужасные классы были вытеснены годами go современными java .time классами, определенными в JSR 310.

LocalTime start = LocalTime.of( 19 , 0 ) ;  // 7 PM.
LocalTime end = LocalTime.of( 10 , 0 ) ;    // 10 AM.

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

Если вы хотите использовать текущий часовой пояс JVM по умолчанию, позвоните ZoneId.systemDefault().

ZoneId z = ZoneId.of( "Africa/Casablanca" ) ; 
LocalTime localTime = LocalTime.now( z ) ;

Спросите, равняется ли текущее время или более поздние, чем начало и до конца. Совет: другой способ задать «равно или позже» - это «не раньше».

boolean withinTimeRange = ( ! localTime.isBefore( start ) ) && localTime.isBefore( end ) ;

Для ранних Android до 26, добавьте библиотеку ThreeTenABP в свой проект получить большую часть функциональности java .time с почти таким же API.

1 голос
/ 04 мая 2020

Здесь, если вы хотите избежать проверки NullPointerException и ParseException:

public static boolean isAvailableForBooking() {
        /* 10:00 AM */
        final int OPEN_HOUR = 10; /* 0 - 23*/
        final int OPEN_MINUTE = 0; /* 0 - 59*/
        final int OPEN_SECOND = 0; /* 0 - 59*/

        /* 07:00 PM */
        final int CLOSED_HOUR = 19;
        final int CLOSED_MINUTE = 0;
        final int CLOSED_SECOND = 0;

        Calendar openHour = Calendar.getInstance();
        openHour.set(Calendar.HOUR_OF_DAY, OPEN_HOUR);
        openHour.set(Calendar.MINUTE, OPEN_MINUTE);
        openHour.set(Calendar.SECOND, OPEN_SECOND);

        Calendar closedHour = Calendar.getInstance();
        closedHour.set(Calendar.HOUR_OF_DAY, CLOSED_HOUR);
        closedHour.set(Calendar.MINUTE, CLOSED_MINUTE);
        closedHour.set(Calendar.SECOND, CLOSED_SECOND);

        Calendar now = Calendar.getInstance();

        return now.after(openHour) && now.before(closedHour);
    }
0 голосов
/ 04 мая 2020

Более простым решением было бы определение временных интервалов в миллисекундах. Затем выберите желаемое время в миллисекундах и выполните проверку lowerBound

0 голосов
/ 04 мая 2020

Если вы попробовали какой-либо код, то, пожалуйста, опубликуйте его в противном случае. Вы можете проверить его, установив текущее время и время начала и окончания службы в объекте календаря, а затем получить объект Date из календаря и сравнить эти даты.

 String SERVICE_START_TIME="202-05-04 19:00:00";
 String SERVICE_END_TIME="202-05-05 10:00:00";
 public static boolean isValidTime() {
    try {

        Date time1 = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss",
                Locale.getDefault()).parse(SERVICE_START_TIME);
        Calendar calendar1 = Calendar.getInstance();
        calendar1.setTime(time1);
        calendar1.add(Calendar.DATE, 1);

        Date time2 = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss",
                Locale.getDefault()).parse(SERVICE_END_TIME);
        Calendar calendar2 = Calendar.getInstance();
        calendar2.setTime(time2);
        calendar2.add(Calendar.DATE, 1);


        Date d = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss",
                Locale.getDefault()).parse(getCurrentTime());
        Calendar calendar3 = Calendar.getInstance();
        calendar3.setTime(d);
        calendar3.add(Calendar.DATE, 1);

        Date now = calendar3.getTime();
        if (now.after(calendar1.getTime()) && now.before(calendar2.getTime())) {
            return true;
        }
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return false;
}

С помощью этой функции вы можете узнать текущее время вашей системы.

  private static String getCurrentTime() {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss",
            Locale.getDefault());
    return sdf.format(new Date()).toUpperCase();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...