Anzeigen von Morgen-, Nachmittags-, Abend- und Nachtnachrichten basierend auf der Zeit in Java
Lesezeit: 1 Minute
Was ich versuche zu tun::
Nachricht anzeigen basierend auf
Guten Morgen (12-12 Uhr)
Gut nach Mittag (12:00-16:00)
Guten Abend (16:00 bis 21:00)
Gute Nacht (21:00 bis 06:00 Uhr)
CODE::
Ich habe das 24-Stunden-Format verwendet, um diese Logik zu erhalten
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();
}
}
Frage:
Ist das der beste Weg, wenn nein, was ist der beste Weg?
@Devrath Off-Topic-Hinweis, sollte es nicht AND && sein, verwenden Sie OR || was wird dazu führen, dass alle Fälle (Stunden >= 1) in den Guten-Morgen-Fall fallen?
– Jazan
21. Dezember 2014 um 13:16 Uhr
Sie sollten wissen, dass die Stunden im Bereich dazwischen liegen 0 und 23: getHours().
– Tom
21. Dezember 2014 um 13:54 Uhr
@Devrath Ich habe die Antwort aktualisiert, um 12:59 zu berücksichtigen.
– Benutzer987339
21. Dezember 2014 um 14:07 Uhr
FYI, die lästigen Datum-Uhrzeit-Klassen wie java.util.Date, java.util.Calendarund java.text.SimpleDateFormat sind jetzt Vermächtnis, ersetzt durch die java.time Klassen. Die meisten von den java.time Funktionalität ist in Java 6 & Java 7 zurückportiert ThreeTen-Backport Projekt. Weiter angepasst für frühere Android (<26) in ThreeTenABP. Sehen Wie benutzt man ThreeTenABP….
Ich würde ein hinzufügen else Fall unten, um unerwartete Werte abzufangen (defensive Programmierung).
– Basilikum Bourque
21. Dezember 2014 um 18:49 Uhr
@BasilBourque Genau. Auch wenn es Ihr Support-Team über einen seltsamen Randfall informiert. Der Schlüssel ist, die App nicht zum Absturz zu bringen, da dies nicht unternehmenskritisch ist.
– Joshua Pinter
13. Mai 2017 um 19:52 Uhr
bekomme Instanz(); Benötige Android API 24.
– Abed Putra
4. August 2017 um 15:40 Uhr
FYI, die lästigen Datum-Uhrzeit-Klassen wie java.util.Date, java.util.Calendarund java.text.SimpleDateFormat sind jetzt Vermächtnis, ersetzt durch die java.time Klassen. Die meisten von den java.time Funktionalität ist in Java 6 & Java 7 zurückportiert ThreeTen-Backport Projekt. Weiter angepasst für frühere Android (<26) in ThreeTenABP. Sehen Wie benutzt man ThreeTenABP….
– Basilikum Bourque
12. Juni 2019 um 3:58 Uhr
Vishal Sonawane
Für alle, die das Neueste suchen Kotlin Syntax für die Antwort von @SMA, hier ist die Hilfsfunktion:
fun getGreetingMessage():String{
val c = Calendar.getInstance()
val timeOfDay = c.get(Calendar.HOUR_OF_DAY)
return when (timeOfDay) {
in 0..11 -> "Good Morning"
in 12..15 -> "Good Afternoon"
in 16..20 -> "Good Evening"
in 21..23 -> "Good Night"
else -> "Hello"
}
}
Ich würde empfehlen, Java 8 LocalTime zu verwenden.
Erstellen Sie vielleicht eine Klasse wie diese, um Ihr Tageszeitproblem zu lösen.
public class GreetingMaker { // think of a better name then this.
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() { // or return String in your case
if (between(MORNING, AFTER_NOON)) {
System.out.println("Good Morning");
} else if (between(AFTER_NOON, EVENING)) {
System.out.println("Good Afternoon");
} else if (between(EVENING, NIGHT)) {
System.out.println("Good Evening");
} else {
System.out.println("Good Night");
}
}
private boolean between(LocalTime start, LocalTime end) {
return (!now.isBefore(start)) && now.isBefore(end);
}
}
Benutzer987339
Sie bestimmen, ob es sich um das erste Intervall handelt, und alle anderen Intervalle hängen von der Obergrenze ab. So können Sie es noch kürzer machen:
Es gibt auch eine andere musterbasierte Methode, um das Gebietsschema standardmäßig basierend auf CLDR-Daten entscheiden zu lassen, wie die Uhrzeit formatiert werden soll:
@Devrath Off-Topic-Hinweis, sollte es nicht AND && sein, verwenden Sie OR || was wird dazu führen, dass alle Fälle (Stunden >= 1) in den Guten-Morgen-Fall fallen?
– Jazan
21. Dezember 2014 um 13:16 Uhr
Sie sollten wissen, dass die Stunden im Bereich dazwischen liegen
0
und23
:getHours()
.– Tom
21. Dezember 2014 um 13:54 Uhr
@Devrath Ich habe die Antwort aktualisiert, um 12:59 zu berücksichtigen.
– Benutzer987339
21. Dezember 2014 um 14:07 Uhr
FYI, die lästigen Datum-Uhrzeit-Klassen wie
java.util.Date
,java.util.Calendar
undjava.text.SimpleDateFormat
sind jetzt Vermächtnis, ersetzt durch die java.time Klassen. Die meisten von den java.time Funktionalität ist in Java 6 & Java 7 zurückportiert ThreeTen-Backport Projekt. Weiter angepasst für frühere Android (<26) in ThreeTenABP. Sehen Wie benutzt man ThreeTenABP….– Basilikum Bourque
12. Juni 2019 um 3:57 Uhr