Kämpfen Sie mit, wie Sie zu vergleichen, Stunden mit unterschiedlichen Zeitzonen in Java?
Habe ich 2 date-Objekt in der Datenbank, die für die Firma arbeiten.
Brauche ich nur die Stunden, aber da muss ich sparen das Datum. es scheint wie folgt:
Date companyWorkStartHour;
Date companyWorkEndHour;
start Stunden: 12-12-2001-13:00:00
beenden Stunden: 12-12-2001-18:00:00
Habe ich die Zeitzone des Unternehmens und der Benutzer. (meine server in einer anderen Zeitzone).
TimeZone userTimeZone;
TimeZone companyTimeZone;
Brauche ich, um zu überprüfen, ob der Benutzer die aktuelle Zeit an (wenn man seine Zeitzone) ist innerhalb des Unternehmens Arbeitszeit (unter Berücksichtigung der Unternehmens-Zeitzone).
Wie kann ich es tun? Ich bin kämpfen seit über einer Woche mit Java Kalender-und ohne Erfolg!
- Ist die Zeitzone der DB sich bereits berücksichtigt? Sind die Stunden korrekt, wenn Sie Abfragen aus der DB als java.sql.Datum und drucken Sie es sofort?
- Allgemeine Empfehlung zu speichern, alle Zeiten in UTC und nur zu konvertieren und aus anderen Zeitzonen für die Eingabe und die Präsentation. Dann Vergleich einfach sein sollte.
Date
und seiner modernen ErsatzInstant
sowohl die UTC-Zeit intern.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
java.util.Date
Klasse ist ein container, der enthält eine Anzahl von Millisekunden seit dem 1. Januar 1970, 00:00:00 UTC. Beachten Sie, dass die KlasseDate
weiß nicht anyting Informationen zu Zeitzonen. KlasseCalendar
wenn Sie brauchen, um die Arbeit mit Zeitzonen. (Bearbeiten 19-Jan-2017: wenn Sie mit Java 8 verwenden Sie die neuen Datum-und Zeit-API im Paketjava.time
).Klasse
Date
ist nicht wirklich geeignet für das halten einer Stunde Anzahl (zum Beispiel 13:00 oder 18:00) ohne Datum. Es ist einfach nicht gemacht für diesen Zweck, so dass, wenn Sie versuchen, verwenden Sie es so, wie Sie scheinen zu tun, Sie laufen in eine Anzahl von Probleme und Ihre Lösung nicht elegant.Wenn Sie vergessen, über die Verwendung der Klasse
Date
zum speichern der Arbeitszeit und verwenden nur Ganzzahlen, wird dies viel einfacher:Wenn Sie wollen auch einige Minuten in Anspruch nehmen (nicht nur Stunden) in Rechnung stellen, könnten Sie etwas wie das hier tun:
Calendar
und setzen der Zeitzone auf es so wie in meinem code oben, und Sie können einzelne Felder auf derCalendar
mitset()
zum Beispiel:cal.set(Calendar.HOUR_OF_DAY, companyWorkStartHour);
.Probieren Sie etwas wie dieses:
Ich habe nicht versucht, die Joda-Bibliothek. Dieser code sollte funktionieren.
BEARBEITEN
Aktualisiert den code zu reflektieren Bruno ' s Kommentare. Sollte nicht sein, wobei die Termine von der Arbeit im Unternehmen timings.
userCurrentDate
) zu 12-12-2001 (auscompanyWorkStart/EndHour
).Hey, ich bin nicht sicher, wie würden Sie tun dies mit Hilfe des Java-Kalender, aber ich würde empfehlen, mit der Joda Time package. Es ist ein viel einfacheres system zu verwenden und es ermöglicht Ihnen den direkten Methoden extrahiert alle Unterkomponenten von Daten und Zeit, und auch nur zum erstellen von einfachen Zeit-Objekte, ohne das Datum beteiligt. Dann Stelle ich mir vor, es wäre eine Frage der Vergleich der 2 Zeitzone Unterschiede und Subtraktion die Differenz von der JodaTime-Objekt.