Отображение утреннего, дневного, вечернего, ночного сообщений на основе Time in java

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

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

  • Доброе утро (12: 00-12: 00)
  • Хорошо после полудня (12 вечера -4 вечера)
  • Добрый вечер (с 16:00 до 21:00)
  • Спокойной ночи (с 9 вечера до 6 утра)

КОД::

Я использовал 24-часовой формат, чтобы получить эту логику

private void getTimeFromAndroid() { Date dt = new Date(); int hours = dt.getHours(); int min = dt.getMinutes(); if(hours>=1 || hours<=12){ Toast.makeText(this, "Good Morning", Toast.LENGTH_SHORT).show(); }else if(hours>=12 || hours<=16){ Toast.makeText(this, "Good Afternoon", Toast.LENGTH_SHORT).show(); }else if(hours>=16 || hours<=21){ Toast.makeText(this, "Good Evening", Toast.LENGTH_SHORT).show(); }else if(hours>=21 || hours<=24){ Toast.makeText(this, "Good Night", Toast.LENGTH_SHORT).show(); } } 

Вопрос:

  • Это лучший способ сделать это, если нет, это лучший способ

Вы должны делать что-то вроде:

 Calendar c = Calendar.getInstance(); int timeOfDay = c.get(Calendar.HOUR_OF_DAY); if(timeOfDay >= 0 && timeOfDay < 12){ Toast.makeText(this, "Good Morning", Toast.LENGTH_SHORT).show(); }else if(timeOfDay >= 12 && timeOfDay < 16){ Toast.makeText(this, "Good Afternoon", Toast.LENGTH_SHORT).show(); }else if(timeOfDay >= 16 && timeOfDay < 21){ Toast.makeText(this, "Good Evening", Toast.LENGTH_SHORT).show(); }else if(timeOfDay >= 21 && timeOfDay < 24){ Toast.makeText(this, "Good Night", Toast.LENGTH_SHORT).show(); } 

Я бы сократил ваш оператор if/elseif :

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

Вы определяете, находится ли он в первом интервале, а затем все остальные интервалы зависят от верхнего предела. Таким образом, вы можете сделать это еще короче:

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

Попробуйте этот код (получите часы и получите минутные методы в классе Date, устарели).

  private void getTimeFromAndroid() { Date dt = new Date(); Calendar c = Calendar.getInstance(); c.setTime(dt); int hours = c.get(Calendar.HOUR_OF_DAY); int min = c.get(Calendar.MINUTE); if(hours>=1 && hours<=12){ Toast.makeText(this, "Good Morning", Toast.LENGTH_SHORT).show(); }else if(hours>=12 && hours<=16){ Toast.makeText(this, "Good Afternoon", Toast.LENGTH_SHORT).show(); }else if(hours>=16 && hours<=21){ Toast.makeText(this, "Good Evening", Toast.LENGTH_SHORT).show(); }else if(hours>=21 && hours<=24){ Toast.makeText(this, "Good Night", Toast.LENGTH_SHORT).show(); } } 

Когда я пишу

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

Я не получил вывод и не обнаружил ошибок. Просто timeOfDay не получит никакого значения в коде. Я чувствовал, что это связано с некоторыми потоками, в то время как Calendar.getInstance() выполняется. Но когда я рухнул на линии, это сработало для меня. См. Следующий код:

 int timeOfDay = Calendar.getInstance().get(Calendar.HOUR_OF_DAY); if(timeOfDay >= 0 && timeOfDay < 12){ greeting.setText("Good Morning"); }else if(timeOfDay >= 12 && timeOfDay < 16){ greeting.setText("Good Afternoon"); }else if(timeOfDay >= 16 && timeOfDay < 21){ greeting.setText("Good Evening"); }else if(timeOfDay >= 21 && timeOfDay < 24){ greeting.setText("Good Morning"); }