Сделайте кнопку нажатой только после даты - PullRequest
0 голосов
/ 21 марта 2020

Я хотел бы знать, что я должен добавить в OnClick кнопки, чтобы сделать ее кликабельной, скажем, между 13:00 и 17:00, но в остальное время будет отображаться тост с надписью «Доступно в 13:00». только." ?

Или какой метод я должен использовать, чтобы сохранить / проверить время?

Вот моя кнопка сейчас:

button.setOnClickListener(new OnClickListener(){
    @Override
    public void OnClick(View v){

    }
});

Заранее спасибо

Ответы [ 3 ]

2 голосов
/ 21 марта 2020

tl; dr

LocalTime lt = LocalTime.now( ZoneId.of( "America/Montreal" ) ) ;

if
( 
    ( ! lt.isBefore( LocalTime.of( 13 , 0 ) )   // If 1 PM or later ( in other words, if not before 1 PM )
    &&                                          // …and…
    lt.isBefore( LocalTime.of( 17 , 0 )         // if not yet 5 PM
) 
{
    … proceed 
}
else
{
    … reject user
}

Half-Open

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

Таким образом, диапазон с 13:00 до 17:00 начинается в 13:00 и продолжается до , но не включает 17:00.

LocalTime start = LocalTime.of( 13 , 0 ) ;
LocalTime stop = LocalTime.of( 17 , 0 ) ;

Захват текущего времени.

ZoneId z = ZoneId.systemDefault() ;  // Or specify a zone such as `Africa/Tunis` or `Asia/Tokyo`. 
LocalTime now = LocalTime.now( z ) ;

Сравнение с диапазоном запуска и остановки. Мы используем equals, isBefore и isAfter методы для LocalTime для сравнения.

Совет: Краткий способ спросить " равно или позже, чем «есть», не раньше ».

boolean nowInEffect = ( ! now.isBefore( start ) ) && ( now.isBefore( stop ) ) ;

Затем выполните действие с пользовательским интерфейсом.

if ( nowInEffect ) {
    … proceed
} else {
    … tell user to check back later
}

О java .time

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

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

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

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

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

  • Java SE 8 , Java SE 9 , Java SE 10 , Java SE 11 и более поздних версий - часть стандартного API Java со связанной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 7
    • Большинство функций java .time перенесено на Java 6 & 7 в ThreeTen-Backport .
  • Android
    • Более поздние версии Android групповых реализаций классов java .time .
    • Для более ранних Android (<26) <a href="https://github.com/JakeWharton/ThreeTenABP" rel="nofollow noreferrer"> ThreeTenABP проект адаптируется ThreeTen-Backport (упоминалось выше). См. Как использовать ThreeTenABP… .
1 голос
/ 21 марта 2020

Я бы сделал это так:

        button.setOnClickListener(new OnClickListener(){
            @Override
            public void OnClick(View v){
                LocalTime time = LocalTime.now();
                // simply check the hour of the day
                if (time.getHour() >= 13 && time.getHour() < 17) {
                   // Welcome for business.
                } else {
                    System.out.println("Available at 1PM only.");
                }
            }
        }

Обратите внимание на использование LocalTime , которое является предпочтительным методом для времени. Существует также LocalDateTime , если возникнет такая необходимость.

Вы также можете рассмотреть возможность установки таймера для включения и отключения кнопки в соответствующие моменты времени. В зависимости от времени название кнопки может быть «Закрыто» или «Открыто».

0 голосов
/ 21 марта 2020

Используйте метод Date, который доступен в библиотеке basi c java. Примерно так:

Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm") ;
dateFormat.format(date);

if(dateFormat.parse(dateFormat.format(date)).after(dateFormat.parse("13:00")) && dateFormat.format(date)).before(dateFormat.parse("17:00")));
{
    System.out.println("Accepted");
}else{
    System.out.println("Only avaible at 1PM only");
}

Поместите это в функцию onClick.

Если это поможет, пожалуйста, проголосуйте за меня. Я здесь новичок и хочу иметь базовую репутацию. Спасибо! ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...