Ob die aktuelle Zeit, falls innerhalb einer bestimmten Zeitspanne, in der der aktuelle Tag in Java
Ich bin sicher, dass dies getan wurde 1000 mal in 1000 verschiedenen Orten. Die Frage ist, ich möchte wissen, ob es eine bessere/standard/schneller Weg, um zu überprüfen, ob die aktuellen "Zeit" ist die Zeit zwischen zwei gegebenen Werte in hh:mm:ss
- format. Zum Beispiel, meine große business-Logik sollte nicht zwischen 18:00:00 and 18:30:00
. So, hier ist was ich im Sinn hatte:
public static boolean isCurrentTimeBetween(String starthhmmss, String endhhmmss) throws ParseException{
DateFormat hhmmssFormat = new SimpleDateFormat("yyyyMMddhh:mm:ss");
Date now = new Date();
String yyyMMdd = hhmmssFormat.format(now).substring(0, 8);
return(hhmmssFormat.parse(yyyMMdd+starthhmmss).before(now) &&
hhmmssFormat.parse(yyyMMdd+endhhmmss).after(now));
}
Beispiel Testfall:
String doNotRunBetween="18:00:00,18:30:00";//read from props file
String[] hhmmss = downTime.split(",");
if(isCurrentTimeBetween(hhmmss[0], hhmmss[1])){
System.out.println("NOT OK TO RUN");
}else{
System.out.println("OK TO RUN");
}
Was ich Suche, ist code, der besser ist
- in der Leistung
- in sieht
- in Richtigkeit
Was ich bin nicht auf der Suche nach
- third-party-Bibliotheken
- Ausnahmebehandlung Debatte
- Variablen-Benennungs-Konventionen
- Methode Modifizierer Fragen
Suche nicht für Drittanbieter-Bibliotheken schließt eine Menge von falschen Antworten zu Joda Zeit...
Ja, Joda Time ist toll, aber alles, was ich verlangen für jetzt, ist dies eine Funktionalität in Bezug auf Zeit und Datum.
wie machst du es mit Jodatime? Ich habe die gleiche Anforderung und kann es mit joda time. Ich brauche, um herauszufinden, ob eine aktuelle Stunde ist in zwischen zwei Stunden.
Ja, Joda Time ist toll, aber alles, was ich verlangen für jetzt, ist dies eine Funktionalität in Bezug auf Zeit und Datum.
wie machst du es mit Jodatime? Ich habe die gleiche Anforderung und kann es mit joda time. Ich brauche, um herauszufinden, ob eine aktuelle Stunde ist in zwischen zwei Stunden.
InformationsquelleAutor ring bearer | 2010-03-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
dies ist alles, was Sie benötigen sollten zu tun, diese Methode ist lose gekoppelt, von den Eingangs-und sehr stimmig.
wie bekommst du die Date-Objekte für den Anfang und das Ende ist irrelevant für den Vergleich. Sie machen Dinge viel mehr kompliziert, als Sie brauchen, um mit übergeben
String
Darstellungen um.Hier ist ein besserer Weg, um die start-und Endtermine, wieder lose gekoppelte und sehr stimmig.
Können Sie jetzt machen zwei gut benannte Methode Aufrufe, wird sich wohl selbst zu dokumentieren.
wie erhalten Sie die Daten, die irrelevant ist, es sollten alle normalisiert werden in einer java.util.Datum-Objekt, damit es genutzt werden kann.
Benennen Sie es auf eine bestimmte Weise, macht es nicht nicht ein schlechtes design. Look up "lose gekoppelt" und "stark zusammenhängend".
lollipop, klingt gut.
Ich denke, ich würde lieber die OP ' s " = SimpleDateFormat() zum Parsen der Zeichenfolge; warum das Rad neu erfinden? Aber die Trennung Parsen von "zwischen" - Bestimmung sinnvoll sein kann.
InformationsquelleAutor
Wie bereits von Kevin, Fuzzy Lollipop ' s Regex nicht abholen Zeiten zwischen 14:00 und 19:00 Uhr.
Man überein, einen vollständigen 24-Stunden-Uhr, die Sie verwenden können:
InformationsquelleAutor Pineechio
Die folgende Klasse ist etwas, das ich erstellt habe aus dem code von anderen Antworten. Es kapselt das Verhalten einer "Zeit" ohne Bezug zu bestimmten Tagen. Unser system verwendet diese Klasse, um zu überprüfen, ob die aktuelle Zeit innerhalb einer von uns bestimmten Wartungsfenster. also 05:00:00 - 07:00:00
InformationsquelleAutor Adam Yocum
Den dateFromHourMinSec-Methode ist fehlerhaft geschrieben. Es nicht zulassen, dass irgendwelche Stunden, wo die seconde Ziffer größer als 3 ist, z.B. 18:00:00. Wenn Sie es ändern, um zu ermöglichen [0-2][0-9] wird es ermöglichen, Zeiten wie 29:00:00.
Ein fix für das?
InformationsquelleAutor Kevin
tl;dr
Mit java.Zeit
Sind Sie mit alten Datum-Zeit-Klassen, die haben sich schlecht entwickelt, verwirrend und lästig. Sie sind jetzt Vermächtnis, überlagert von der java.Zeit-Klassen.
LocalTime
Nicht bestehen, bloße Zeichenfolgen, die Zeit-von-Tag-Werte. Wir haben jetzt einen Typ, der
LocalTime
Klasse.Passieren die Instanzen, um Ihre utility-Methode. Diese Methode sollte nicht jedem Parsen, so dass keine Notwendigkeit zu werfen, die parsing-exception.
ZonedDateTime
Einer Zeitzone ist entscheidend für die Bestimmung des aktuellen Datums und der Uhrzeit. Für jeden gegebenen Augenblick, das Datum variiert rund um den Globus durch die zone. Zum Beispiel, ein paar Minuten nach Mitternacht in Paris Frankreich ist ein neuer Tag, während immer noch "gestern" in Montréal Québec.
Angeben die richtige Zeit zone name im format
continent/region
wieAmerika/Montreal
,Africa/Casablanca
, oderPacific/Auckland
. Verwenden Sie niemals die 3-4 Buchstaben-Abkürzung wieEST
oderIST
wie Sie sind nicht wahr, Zeitzonen, nicht standardisierten und nicht sogar einzigartig(!).Vergleichen Sie die time-of-Tag, der nun, wir könnten Sie einfach extrahieren Sie eine
LocalTime
aus, dassZonedDateTime
. Aber wir haben das problem der Anomalien, wie die Daylight Saving Time (DST) und Politiker der Neudefinition von Zeit-Zonen. Es kann nicht jeder 6 Uhr Stunde an einem bestimmten Datum. Die Lösung für dieses Problem hängt von Ihrem business-Kontext und Ihr Unternehmen zu Regeln. Entweder Sie ignorieren das Problem, und bleiben buchstäblich zu Fragen, ob die aktuelle Zeit zwischen Ihrem Ziel-start-stop-Zeit. Oder konnte Sie die Zeitzone auf Ihrem start-stop-Zeiten-Tag für Tag und lassenZonedDateTime
Klasse Anpassungen vornehmen, wie Sie es für richtig hält. Schauen wir uns die beiden Ansätze.Ignorieren Anomalien
Zuerst ignorieren Sie eventuelle Abweichungen. Fragen Sie einfach und wörtlich, wenn die aktuelle Uhrzeit zwischen der Ziel-start-und stop-Zeiten-Tag.
Können wir extrahieren ein time-of-day-Objekt aus der Zonen-Datum /Uhrzeit-Objekt.
Vergleichen, die auf unserer start-stop-Zeiten-Tag. Beachten Sie, dass wir hier die Halb-Offene Ansatz zur Definition einer Zeitspanne. In diesem Ansatz, der Anfang ist inclusive, während das Ende exklusive. Dieser Ansatz ist üblich in den Datum-Zeit-Arbeit und in der Regel ist der Weise Weg zu gehen.
Betrachten Anomalien
Als nächsten betrachten wir irgendwelche Anomalien. Wir übernehmen die start-und stop-Zeiten-Tag, um das aktuelle Datum innerhalb der gleichen Zeitzone. Wir extrahieren Sie die Datum-nur von der Zonen-Datum /Uhrzeit-Objekt.
Studie der Klasse-Dokumentation zu verstehen, das Verhalten von
ZonedDateTime.
bei der Lösung von ungültigen Zeit-von-Tag-Werte. Es gibt keine perfekte Art und Weise zu lösen nicht vorhandene Zeit-von-Tag-Werte, so müssen Sie entscheiden, ob diese Klasse' Weg, erfüllt Ihre business-Regeln.Gelten die gleichen Vergleich Logik, wie wir oben gesehen haben.
Alternative Möglichkeit, um den Vergleich ist die Verwendung der handlichen
Interval
- Klasse aus dem ThreeTen-Extra-Projekt. Diese Klasse nimmt einen Schmerz derInstant
Objekte, die Sie extrahieren können von IhremZonedDateTime
Objekte. DieInstant
Klasse repräsentiert einen moment auf der Zeitachse, UTC mit einer Auflösung von Nanosekunden (bis zu neun (9) Ziffern eines dezimalbruchs).Über java.Zeit
Den java.Zeit framework ist in Java 8 und höher. Diese Klassen verdrängen die lästige alte Vermächtnis Datum-Zeit-Klassen wie
java.util.Date
,Calendar
, &" = SimpleDateFormat
.Den Joda-Time Projekt, jetzt in Wartungsmodus, rät der migration auf die java.Zeit Klassen.
Um mehr zu erfahren, siehe die Oracle Tutorial. Und die Suche Stack Overflow für viele Beispiele und Erklärungen. Spezifikation JSR 310.
Wo erhalten Sie die java.Zeit-Klassen?
Den ThreeTen-Extra Projekt erweitert die java.mal mit zusätzlicher Klassen. Dieses Projekt ist ein Testgelände für mögliche künftige Erweiterungen zu java.Zeit. Sie finden möglicherweise einige nützliche Klassen, die hier wie
Interval
,YearWeek
,YearQuarter
, und mehr.InformationsquelleAutor Basil Bourque