Warum " = SimpleDateFormat.format () " = SimpleDateFormat.parse() geben unterschiedliche Zeit, obwohl die Einstellung nur eine Zeitzone?
Ich versuche die Zeitzone setzen, um die verschiedenen Länder timezone mit Hilfe von " = SimpleDateFormat. "=SimpleDateFormat.format() gibt richtige aktuelle Zeit in der angegebenen Zeitzone aber " = SimpleDateFormat.parse() gibt lokale Strom der Zeit, ich weiß nicht, warum dies geschieht. Hier ist mein code -
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:MM:ss");
dateFormat.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
System.out.println("Time1 : " + dateFormat.format(new Date()));
System.out.println("Time2 : " + dateFormat.parse(dateFormat.format(new Date())));
Die Ausgabe -
Time1 : 2013-01-17 21:01:55
Time2 : Fri Jan 18 10:30:55 IST 2013
Time1 ist die Ausgabe von "America/Los_Angeles" und Zeit2 ist die Ausgabe des lokalen(D. H. "Asia/Calcutta").
Ich will nur die aktuelle Zeit der angegebenen Zeitzone in UTC-Sekunden-format (also Sekunden seit dem Jan 1, 1970).
Warum " = SimpleDateFormat.format () " = SimpleDateFormat.parse() geben unterschiedliche Zeit, obwohl die Einstellung nur eine Zeitzone?
Bitte helfen Sie mir.
Bedeutet, dass es keine Verwendung von " = SimpleDateFormat.parse()
Natürlich es ist. Sagen, Sie haben einen string der ein Datum in einem XML-Dokument oder eine Datenbank, oder sone EDI-Datei, verwenden Sie die Methode parse in ein Datum. Das ist nur ein Anwendungsfall.
Danke @Wahrnehmung, es scheint, format() und parse() haben unterschiedliche Funktionen.
FYI, die furchtbar lästig alten Datum-Zeit-Klassen wie
java.util.Date
, java.util.Calendar
, und java.text.SimpleDateFormat
sind jetzt legacy, überlagert von der java.Zeit Klassen gebaut in Java 8 und höher. Siehe Einführung Oracle.InformationsquelleAutor Deepu | 2013-01-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
mit Analysieren, Sie Befehl, den compiler zu verstehen, der bestimmten Datum in bestimmten format. Versteht es und halten es in einem eigenen format und bereit zu geben, was format, das Sie wünschen!
Erhalten Sie eine Ausgabe, die ein signal ist, dass Sie Eingabe Datum ist erfolgreich analysiert. Sie nicht haben die Kontrolle über das format für das Datum , die variable zu speichern.
mithilfe von format, konvertieren Sie das Datum auf jedem gewünschten format.
Einfach
Analysieren -> Lesen ( ich kann es Lesen, in welcher Art und Weise und speichern Sie in welcher Weise auch immer-ich will)
Format -> Schreiben ( ich gebe Sie in das format, das Sie wollten )
docs.oracle.com/javase/1.4.2/docs/api/java/text/... Fast alle Formate sind hier!
Dank dude für deine Hilfe.
InformationsquelleAutor madhairsilence
dateFormat.format() geben Sie die Ausgabe im angegebenen format und es wird sich ändern Sie die Zeitzone auf die im Formatierer. (z.B. dateFormat.setTimeZone(TimeZone.getTimeZone("Amerika/Los_Angeles"));)
In der Erwägung, dass dateFormat.parse() setzt das Datum ist bereits in der genannten Zeitzone und es wird konvertieren Sie das Datum in Ihrer lokalen Zeitzone.
InformationsquelleAutor Pooja Garg
dateFormat.parse() in der zweiten println
gibt Datum und Datum.toString() liefert die string-Repräsentation von Daten in
EEE MMM dd HH:mm:ss zzz yyyy
- format. Siehe Datum.toString () - APIInformationsquelleAutor Evgeniy Dorofeev
Mit der ersten Zeile, die Sie formatieren Sie Ihre lokale Datum zu bestimmten Zeitzone.Es wird ein string zurückgegeben, die stellt das argument übergebene Datum in bestimmten Zeitzone.Aber der parse-Funktion ist anders.Wird es wieder ein date-Objekt repräsentiert eine Anzahl von Millisekunden seit dem 1. Januar 1970, 12:00 UHR UTC. Es enthält keine Zeitzone Informationen.
Datum Dienstprogramm ist sehr begrenzt für den Umgang mit timezone Berechnungen, besser versuchen joda
Danke @Renjith
InformationsquelleAutor Renjith
tl;dr
Den schrecklichen alten Datum-Zeit-Klassen sind ziemlich verwirrend, vor allem in Ihrem Umgang mit impliziten Standard-Zeitzonen. Aber Ihr Geheimnis ist strittig, wie diese schrecklichen alten Klassen verdrängt wurden vor Jahren durch moderne java.Zeit Klassen.
java.Zeit
Die Frage ist umstritten, wie der schreckliche alte Datum-Zeit-Klassen wie
SimpleDateFormat
wurden verdrängt durch die java.Zeit.Aktuellen moment
Den
java.util.Date
Klasse wird ersetzt durchjava.time.Instant
. Beide repräsentieren einen moment in UTC, immer in UTC. (TrotzDate::toString
Ihnen liegen, bei der Anwendung der JVM-das aktuelle Standard-Zeit-zone.)Passen Sie in eine Zeit-zone.
Passen Sie in eine andere Zeitzone.
Alle drei Objekte (
instant
,zdt
, &zdtKolkata
) darstellen die gleichen gleichzeitiger moment, den gleichen Punkt auf der Zeitachse. Nur die wall-clock-Zeit ist anders.Strings
Beim generieren von Zeichenfolgen, Datum /Uhrzeit-Werte, empfehle ich immer, einschließlich der offset - /zone Informationen, es sei denn, der Kontext ist absolut kristallklar. Ich habe gesehen, viel Verwirrung in der Welt der Wirtschaft, verursacht durch die Berichte, wo der zeitliche Rahmen war nicht eindeutig.
Aber wenn Sie darauf bestehen, entweder definieren Sie Ihre eigene Formatierung Muster mit
DateTimeFormatter
Klasse, oder verwenden Sie die angegebenen formatterISO_LOCAL_DATE_TIME
und ersetzen Sie dieT
in der Mitte mit einem RAUM.Unzoned Datum-Zeit
Teil des Problems ist die Mehrdeutigkeit der Zeichenfolge
2013-01-17 21:01:55
. Dieser string fehlt jegliche Anzeige der Zeitzone oder der offset von UTC. Solch ein Wert ist nicht einen moment, ist nicht einen Punkt auf der Zeitleiste. Zum Beispiel 9 Uhr in Indien kommt mehrere Stunden früher als 9 Uhr in Québec. Ohne eine zone oder offset, string repräsentiert nur Potenzial Momente, die zusammen einen Bereich von etwa 26-27 Stunden, die Auswahl der Zeitzonen rund um den Globus.Den legacy-Klassen hatten keine solche Klasse darstellen diese Art von Wert. In den modernen Klassen, wir haben
LocalDateTime
für diesen Zweck, eine nicht-moment, Datum und Zeit-von-Tag ohne zone/offset.Den java.Zeit Klassen verwenden ISO-8601-standard-Formate, die standardmäßig beim Parsen/generieren von strings. Ihre Eingaben nahezu entspricht. Wir brauchen nur ersetzen Sie das LEERZEICHEN in der Mitte mit einem
T
.Wenn Sie wissen, für eine Tatsache, dass die Absicht hinter dieser Zeichenfolge zu repräsentieren, ein moment in einer bestimmten Zeit-zone, gelten ein
ZoneId
zu bekommenZonedDateTime
. Zum Beispiel, wenn Sie sicher sind, es stellt einen moment auf den meisten der west coast of North America, verwenden SieAmerica/Los_Angeles
.Einstellen von zone UTC, extrahieren Sie eine
Instant
Objekt. 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 legacy Datum-Zeit-Klassen wie
java.util.Date
,Calendar
, &" = SimpleDateFormat
.Den Joda-Time Projekt, jetzt in Wartung-Modus, 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.
Können Sie exchange java.Zeit Objekte direkt mit Ihrer Datenbank. Verwenden Sie eine JDBC-Treiber kompatibel mit JDBC 4.2 oder später. Keine Notwendigkeit für Streicher, keine Notwendigkeit für
java.sql.*
Klassen.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