Frage

Ich habe ein Kalenderobjekt [LocalDate], das in EST ist: Sagen Sie 6. November 15:34 ... und ich habe die Zeitzone auf GMT+5: 30 gesetzt ... jetzt, wenn ich das tue Calendar.HOUR_OF_DAY Es gibt mich zurück.

Das Datum bleibt jedoch noch am 6. November ... und localDate.getTime() Gibt immer noch 6. November zurück. Und selbst wenn ich das LocalDate drucke. Es zeigt die Zeitzone mit +5: 30, aber der Tag und alles andere ist immer noch die ursprüngliche Ortszeit. [dh 6. November

Ich kann einfach nicht verstehen, warum ...

Bearbeiten ::

Ich verstehe also, dass ich das Datum nicht zusammen mit der Zeitzone ändern muss. Nur ändern Sie die Art und Weise, wie Datum angezeigt wird, und dies kann mit der festgelegten Zeitzone erfolgen.

Keine korrekte Lösung

Andere Tipps

localDate.getTime() Gibt eine zurück java.util.Date Das ist eine Menge roher Zeit seit einem festen Punkt. Zeitzonen beeinflussen nur die menschliche lesbare Darstellung des Zeitpunkts.

15:34 Nov 6th UTC - 5und02:04 Nov 7th UTC + 5:30

sind beide genau der gleiche Punkt in der absoluten Zeit. Es sind nur zwei verschiedene menschliche Wege, um denselben Moment zu beschreiben.

Das Ändern der Zeitzone im Kalender hat also keinen Einfluss auf den Wert, der von zurückgegeben wird getTime()

Date Objekte haben keine Zeitzone - a Date Objekt repräsentiert einen "absoluten" Moment in der Zeit. Wenn Sie a drucken Date Objekt (durch implizit oder explizit rufen toString() darauf):

Date date = ...;
System.out.println(date);

Dann wird es mit einem Standardformat formatiert, das das Datum in Ihrer örtlichen Zeitzone zeigt - egal ob Sie das haben Date Objekt von a Calendar die auf eine andere Zeitzone eingestellt war.

Wenn Sie die anzeigen möchten Date Verwenden Sie in einer anderen Zeitzone a DateFormat Objekt und legen Sie die Zeitzone fest, die Sie in diesem Objekt anzeigen möchten:

Date date = ...;

DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");
df.setTimeZone(TimeZone.getTimeZone("UTC"));  // For example, UTC

// Prints 'date' in UTC
System.out.println(df.format(date));

Frage ist nicht klar

Ihre Frage ist verwirrend.

Möglicherweise sind Sie verwirrt über die Bedeutung von Zeitzonen. Wie die richtigen Antworten von Jesper und Affe sagten, ändert sich die Zeitzonen von Verschiebungen nicht in der Zeitlinie des Universums. Angenommen, Bob in New York US nennt Susan in Reykjavík Island. Island verwendet UTC das ganze Jahr über ihre Zeitzone. Bob und Susan sprechen im selben Zeitpunkt miteinander. Aber wenn Bob die Uhr an seiner Wand schaut, sieht er eine Zeit, die 5 Stunden früher als eine Uhr an Susans Wand ist. New York hat einen fünfstündigen Versatz hinter UTC (-5: 00).

Ein weiteres Problem mit Ihrer Frage: Sie sprechen auch über einen Offset von 5:00 Zeitzonen sowie über einen Offset von 5:30. Welches ist es? Oder haben Sie zwei Zeitzonen sowie GMT/UTC?

Joda-Zeit

Ich werde Ihnen ein bisschen Beispiel für Quellcode geben.

Das Joda-Zeit Die Bibliothek erleichtert die Arbeit des Datums über.

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.

// Use time zone names rather than explicit number of hours offset is generally a good thing.
// Affords Joda-Time an opportunity to make adjustments such as Daylight Saving Time (DST).

// Question asked:
// (1) Start with a US east coast time (Standard offset of -5:00) of November 6, 2013 15:34.
// (2) Move that datetime to UTC (GMT) time zone (no offset).
// (3) Move that datetime to Kolkata (formerly known as Calcutta) India time zone (Standard offset of +05:30).

// Joda-Time has deprecated use of 3-letter time zone codes because of their inconsistency. Use other identifier for zone.
// Time Zone list: http://joda-time.sourceforge.net/timezones.html  (Possibly out-dated, read note on that page)
org.joda.time.DateTimeZone newyorkTimeZone = org.joda.time.DateTimeZone.forID( "America/New_York" );
org.joda.time.DateTimeZone kolkataTimeZone = org.joda.time.DateTimeZone.forID( "Asia/Kolkata" );

// Question calls for: EST Nov 6, 15:34 (Standard offset of -5:00).
// This DateTime constructor calls for passing: year, month, day, time zone.
org.joda.time.DateTime dateTimeInNewYork = new org.joda.time.DateTime( 2013, org.joda.time.DateTimeConstants.NOVEMBER, 6, 15, 34, newyorkTimeZone );
// Move to UTC time zone (no offset).
org.joda.time.DateTime dateTimeUtc = dateTimeInNewYork.toDateTime( org.joda.time.DateTimeZone.UTC );
// Move to Kolkata IN time zone (Standard offlet of +05:30).
org.joda.time.DateTime dateTimeInKolkata = dateTimeUtc.toDateTime( kolkataTimeZone ); // Or invoke this method on dateTimeInNewYork, does not matter which.

// All three of these date-time objects represent the same moment in the time-line of the Universe,
// but present themselves with different time-zone offsets.
System.out.println( "dateTimeInNewYork: " + dateTimeInNewYork );
System.out.println( "dateTimeUtc: " + dateTimeUtc );
System.out.println( "dateTimeInKolkata: " + dateTimeInKolkata );

Beim Lauf…

dateTimeInNewYork: 2013-11-06T15:34:00.000-05:00
dateTimeUtc: 2013-11-06T20:34:00.000Z
dateTimeInKolkata: 2013-11-07T02:04:00.000+05:30

enter image description here

Über Joda-Zeit…

// Joda-Time - The popular alternative to Sun/Oracle's notoriously bad date, time, and calendar classes bundled with Java 7 and earlier.
// http://www.joda.org/joda-time/

// Joda-Time will become outmoded by the JSR 310 Date and Time API introduced in Java 8.
// JSR 310 was inspired by Joda-Time but is not directly based on it.
// http://jcp.org/en/jsr/detail?id=310

// By default, Joda-Time produces strings in the standard ISO 8601 format.
// https://en.wikipedia.org/wiki/ISO_8601

// About Daylight Saving Time (DST): https://en.wikipedia.org/wiki/Daylight_saving_time

// Time Zone list: http://joda-time.sourceforge.net/timezones.html
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top