0

Показ сообщений "Утро", "День", "Вечер", "Ночь" в зависимости от времени в Java

11

Что я пытаюсь сделать::

Показать сообщение в зависимости от времени суток

  • Доброе утро (с 0:00 до 12:00)
  • Добрый день (с 12:00 до 16:00)
  • Добрый вечер (с 16:00 до 21:00)
  • Доброй ночи (с 21:00 до 6:00)

КОД::

Я использовал 24-часовой формат для реализации этой логики

private void getTimeFromAndroid() {
        Date dt = new Date();
        int hours = dt.getHours();
        int min = dt.getMinutes();

        if(hours>=1 || hours<=12){
            Toast.makeText(this, "Доброе утро", Toast.LENGTH_SHORT).show();
        }else if(hours>=12 || hours<=16){
            Toast.makeText(this, "Добрый день", Toast.LENGTH_SHORT).show();
        }else if(hours>=16 || hours<=21){
            Toast.makeText(this, "Добрый вечер", Toast.LENGTH_SHORT).show();
        }else if(hours>=21 || hours<=24){
            Toast.makeText(this, "Доброй ночи", Toast.LENGTH_SHORT).show();
        }
    }

Вопрос:

  • Является ли этот способ наилучшим? Если нет, то какой способ лучше?

5 ответ(ов)

1

Вы можете сделать что-то подобное:

Calendar c = Calendar.getInstance();
int timeOfDay = c.get(Calendar.HOUR_OF_DAY);

if(timeOfDay >= 0 && timeOfDay < 12){
    Toast.makeText(this, "Доброе утро", Toast.LENGTH_SHORT).show();        
}else if(timeOfDay >= 12 && timeOfDay < 16){
    Toast.makeText(this, "Добрый день", Toast.LENGTH_SHORT).show();
}else if(timeOfDay >= 16 && timeOfDay < 21){
    Toast.makeText(this, "Добрый вечер", Toast.LENGTH_SHORT).show();
}else if(timeOfDay >= 21 && timeOfDay < 24){
    Toast.makeText(this, "Доброй ночи", Toast.LENGTH_SHORT).show();
}

Убедитесь, что вы импортировали необходимые классы для использования Calendar и Toast. Это код проверяет текущее время суток и отображает соответствующее приветствие на экране.

0

Для всех, кто ищет актуальный синтаксис Kotlin в ответе @SMA, вот вспомогательная функция:

fun getGreetingMessage(): String {
    val calendar = Calendar.getInstance()
    val hourOfDay = calendar.get(Calendar.HOUR_OF_DAY)

    return when (hourOfDay) {
        in 0..11 -> "Доброе утро"
        in 12..15 -> "Добрый день"
        in 16..20 -> "Добрый вечер"
        in 21..23 -> "Доброй ночи"
        else -> "Здравствуйте"
    }
}

Эта функция возвращает приветственное сообщение в зависимости от времени суток.

0

Я бы упростил ваш оператор if/elseif следующим образом:

String greeting = null;
if (hours >= 1 && hours < 12) {
    greeting = "Good Morning";
} else if (hours >= 12 && hours < 17) {
    greeting = "Good Afternoon";
} else if (hours >= 17 && hours < 22) {
    greeting = "Good Evening";
} else if (hours >= 22 && hours <= 24) {
    greeting = "Good Night";
}
Toast.makeText(this, greeting, Toast.LENGTH_SHORT).show();

Обратите внимание, что я изменил условия, чтобы использовать "меньше 17" и "меньше 22" вместо "меньше или равно", что позволяет избежать дублирования границ между временными интервалами.

0

Я рекомендую использовать LocalTime из Java 8.

Вы можете создать класс, который будет обрабатывать вашу задачу с временем суток. Например:

public class GreetingMaker { // придумайте более подходящее название.

  private static final LocalTime MORNING = LocalTime.of(0, 0, 0);
  private static final LocalTime AFTER_NOON = LocalTime.of(12, 0, 0);
  private static final LocalTime EVENING = LocalTime.of(16, 0, 0);
  private static final LocalTime NIGHT = LocalTime.of(21, 0, 0);

  private LocalTime now;

  public GreetingMaker(LocalTime now) {
    this.now = now;
  }

  public void printTimeOfDay() { // или верните строку, если вам это нужно
    if (between(MORNING, AFTER_NOON)) {
      System.out.println("Доброе утро");
    } else if (between(AFTER_NOON, EVENING)) {
      System.out.println("Добрый день");
    } else if (between(EVENING, NIGHT)) {
      System.out.println("Добрый вечер");
    } else {
      System.out.println("Доброй ночи");
    }
  }

  private boolean between(LocalTime start, LocalTime end) {
    return (!now.isBefore(start)) && now.isBefore(end);
  }

}

Этот класс позволяет удобно определять время суток и выводить соответствующее приветствие. Вы можете передать текущее время при создании объекта GreetingMaker, и он будет обрабатывать это время, чтобы выводить приветствия.

0

Судя по коду, который вы предоставили, вы пытаетесь определить текущее время и вывести соответствующее приветствие в зависимости от времени суток. Тем не менее, вы упомянули, что методы getHours() и getMinutes() в классе Date устарели (deprecated). Я рекомендую использовать более современные API, такие как LocalTime из пакета java.time, который был введен в Java 8.

Вот пример, как можно переписать ваш код, чтобы избежать использования устаревших методов:

import java.time.LocalTime;
import android.widget.Toast;

private void getTimeFromAndroid() {
    LocalTime currentTime = LocalTime.now();
    int hours = currentTime.getHour();

    if (hours >= 0 && hours < 12) {
        Toast.makeText(this, "Good Morning", Toast.LENGTH_SHORT).show();
    } else if (hours >= 12 && hours < 17) {
        Toast.makeText(this, "Good Afternoon", Toast.LENGTH_SHORT).show();
    } else if (hours >= 17 && hours < 21) {
        Toast.makeText(this, "Good Evening", Toast.LENGTH_SHORT).show();
    } else {
        Toast.makeText(this, "Good Night", Toast.LENGTH_SHORT).show();
    }
}

Таким образом, вы используете LocalTime.now() для получения текущего времени и getHour() для получения часа. Это более современный и предпочтительный подход. Не забудьте убедиться, что у вас есть соответствующие импорты для использования LocalTime!

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь