Das Datum gibt einen Tag weniger als der tatsächliche Zeitpunkt während der Konvertierung von Datum-Kalender
Ich übertrage das Datum aus dem vorderen Ende, das IST(Datum der indischen Zeitzone). Und in den java-code, ich bin die Umwandlung Datum, um den Kalender mit dem folgenden code(Dies geschieht in der server dort in US-PST-Zeitzone).
Calendar cal = Calendar.getInstance();
int offset = date.getTimezoneOffset();
logger.info("Calendar Instance - " + cal);
cal.setTime(date);
logger.info("Calendar Instance after setting date - " + cal);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
logger.info("Calendar Instance after setting zeros - " + cal);
return cal;
so, wenn ich sehe, das Letzte Protokoll der Tag des Monats wird ein Tag weniger als das, was ich weitergegeben.zB. wenn ich den pass 22/06/2015 TRITT es Verschiebungen zu 21/06/2015. also nach der Verarbeitung schließlich zeigt es 21/06/2015 in der Liste der Daten, die in einem anderen UI-Seite.
- Wo ist
date
gesetzt? - Don zur Verfügung-Kalender im Allgemeinen. Die Bibliothek ist ein Chaos. Verwenden Sie java.mal statt
- Könnten Sie bitte erläutern. Die api, die in java-code akzeptiert Kalender nur. wie auf java.Zeit mit diesem.
- Datum übergeben wird, von UI.
- Es wäre sinnvoll zu sehen, wo/wie das UI zu schaffen, das
Date
Objekt, da könnte es einige Feld-Wert, mathematische Fehler. DieDAY_OF_MONTH
Feld der erste Wert beginnt bei 1, nicht 0. Machst du eine beliebige Anzahl manipulation überall? - J Nein, ich bin nicht zu tun, eine beliebige Anzahl manupulation. private static Kalender getDateWithoutTime(Date Datum) { ---- } in diesem, wenn ich Debuggen bekomme ich Datum 22/06/2015 was IST Datum und sobald ich konvertieren, um den Kalender DAY_OF_MONTH wäre 21. Und nachdem Sie die Antwort von der API-schließlich wäre es nur 21.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies geschieht, weil die JVM auf der server-Seite und JVM auf der client-Seite verwenden, verschiedene Zeitzonen standardmäßig Java TimeZone:
Wie wir sehen können, Pacific Time Zone auf dem server hat UTC−8:00 und Indian Standard Time auf den client hat UTC+05:30. Sie unterscheiden sich durch 13.30 und indischen Datum X konvertiert wird UNS als X-13.30 Uhr was kann die Ausbeute eines Tages, bevor Sie auf der server-Seite, die für bestimmte X.
Mehrere workarounds sind möglich, je nachdem, wie können Sie beeinflussen/ändern Ihrer server-und client-Anwendung. Zum Beispiel können Sie arbeiten mit Datumsangaben in UTC+00:00 Zeitzone für beide server-und client-Seite. Wenn Sie brauchen, um ein Datum, um den Benutzer können Sie konvertieren Indische Zeit-zone, wenn nötig.
Anstatt einfach mit
Calendar cal = Calendar.getInstance();
können Sie erstellen, die "clear" - Kalender, in dem Sie Benutzer später einstellen Tag, Monat und JahrDurch die Art und Weise, wenn Sie manipulieren, Datum und Uhrzeit in Java können Sie prüfen,Joda Time, die mehr erweiterte Optionen und optimierte Leistung.
Interval
im Joda-Time, aber (noch?) nicht in java.Zeit. Joda-Zeit weiterhin als aktives Projekt läuft in mehreren Versionen von Java und Android zu. Also, ja, man sollte anfangen mit java.Zeit, wo möglich, aber ansonsten verwenden Sie Joda-Time. Sehen Sie sich auch in ThreeTen-Extra - Projekt für das hinzufügen von Funktionen auf java.Zeit.Die Antwort von Antonio korrekt ist und akzeptiert werden soll (klicken Sie auf das leere Kontrollkästchen daneben).
Diese Antwort einige Gedanken ergänzt und Beispiel-code.
Vermeiden 3-Buchstaben-Zeit-Zone-Codes
Vermeiden Sie die Verwendung oder auch nur daran zu denken, die 3 oder 4 Buchstaben-codes wie
IST
oderPST
. Sie sind nicht standardisiert, Sie sind nicht einzigartig, und Sie weiter zu verwirren Themen rund um Daylight Saving Time (DST). Zum Beispiel, TRITT bedeutet "Indien Standard Time", "Irish Standard Time", und mehr.Verwenden richtige Zeitzone Namen. Die meisten von Ihnen sind in einer "Kontinent" + "/" + "Stadt/region" - Muster. Die Stadt/region name ist nicht gemeint, die speziell für diese Stadt, sondern eher als einen leicht identifizierbaren Namen für so große Fläche wie möglich der Aktien über den gleichen Satz von Vergangenheit, Gegenwart und Zukunft, Regeln für Zeitzone-Regeln und Anomalien (einschließlich DST).
UTC verwenden
In der Regel sollten Sie mit Hilfe UTC-Zeitzone für alle Ihre business-Logik, Datenhaltung und Datenaustausch. Passen Sie zu einer bestimmten Zeit-zone nur für die Präsentation, wenn zu erwarten durch den Benutzer.
Verwenden Sie Eine Anständige Datum-Zeit-Rahmen
Dem alten java.util.Datum/.Kalender-Klassen waren ein kühner Versuch, auf den Umgang mit Datum und Uhrzeit arbeiten, Sie aber letztlich gescheitert. Sie sind notorisch lästig, fehlerhaft im design und in der Umsetzung. Um Sie zu vermeiden.
Den 3rd-party - Joda-Time - Bibliothek ist eine Lösung. Es funktioniert in vielen Versionen von Java und auch in Android. Joda-Time-inspiriert die andere Lösung, die java.Zeit-Paket gefunden in Java 8 und später (Tutorial).
Lösung
Scheint die Frage zu haben, ein Ziel, ein auf java.util.Date-Objekt, weisen Sie die gewünschte Zeitzone, und das erzeugen eines java.util.Kalender-Objekt.
Glücklicherweise java.Zeit Rahmen hat Konvertierungs-Methoden. Sehen diese Tutorial-Seite.
Beispiel-code folgt, mit Hilfe von java.die Zeit von Java 8 Update 45.
Möchten Sie vielleicht Einfuhren wie:
Let ' s simulieren immer eine java.util.Datum übergeben. Instanziieren wir ein Datum basierend auf "jetzt".
Dann definieren wir die gewünschten Zeitzonen, mit richtige Zeitzone Namen. Wir werfen in Montreal just for fun sowie der pacific Vereinigten Staaten und Indien Zeitzonen in der Frage genannten.
Dann sind wir zu konvertieren, dass zu einem
Instant
, einen Punkt auf der Zeitachse, die ohne Rücksicht auf die Zeitzone.Dann weisen wir die verschiedenen Zeitzonen zu erstellen
ZonedDateTime
Instanzen. Sehen Sie, wie können wir instanziieren eine ZonedDateTime zwei Möglichkeiten: [a] aus einem Augenblick, oder [b] aus einem anderen ZonedDateTime über diewithZoneSameInstant
Methode. Beide Möglichkeiten werden unten gezeigt.Beachten Sie, dass java.Zeit (und Joda-Time) verwendet immutable Objekte, ein design-pattern, wo wir neue Instanzen zu erstellen, basierend auf dem alten Beispiel, anstatt zu verändern ("mutieren") der alten Instanz. Thread-Sicherheit ist einer der großen Vorteile.
Schließlich konvertieren wir eine von denen eine
GregorianCalendar
- Objekt, das eine Unterklasse vonjava.util.Calendar
.Dump in die Konsole.
Wenn Sie ausgeführt wird.