Pergunta

Eu tenho um objeto de calendário [LocalDate] que está em EST: digamos 6 de novembro, 15:34 ... e eu defini o fuso horário para GMT+5: 30 ... agora quando eu faço o Calendar.HOUR_OF_DAY Ele me devolve 2 ... o que eu sei é perfeito .. já que são 15:34 + 5 horas para GMT e depois +5: 30 ao fuso horário .. o que significa apenas .. 26:04, que é 2 de 7.

No entanto, a data ainda permanece como 6 de novembro ... e localDate.getTime() Ainda volta 6 de novembro. E mesmo quando imprimir o LocalDate. Ele mostra o fuso horário como +5: 30, mas o dia e tudo o mais ainda são como a hora local original .. [ou seja, 6 de novembro

Eu simplesmente não consigo entender por que ...

Edit ::

Então, eu entendo que não preciso alterar a data junto com o fuso horário. Somente altere a data em que a data é exibida adequada a esse local e isso pode ser feito usando o fuso horário que foi definido.

Nenhuma solução correta

Outras dicas

localDate.getTime() retorna a java.util.Date que é uma quantidade de tempo bruto desde um ponto fixo. Os fusos horários afetam apenas a representação legível humana do ponto no tempo.

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

são exatamente o mesmo ponto no tempo absoluto. São apenas duas maneiras humanas diferentes de descrever o mesmo instante.

Portanto, mudar o fuso horário no calendário não tem efeito no valor retornado por getTime()

Date Objetos não têm um fuso horário - um Date Objeto representa um momento "absoluto" no tempo. Quando você imprime um Date objeto (chamando implicitamente ou explicitamente toString() nele):

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

Em seguida, ele será formatado usando algum formato padrão que mostrará a data no seu fuso horário local - não importa se você obteve o Date objeto de a Calendar que foi definido para um fuso horário diferente.

Se você quiser exibir o Date em um fuso horário diferente, use um DateFormat Objeto e defina o fuso horário em que você deseja exibir sua data nesse objeto:

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));

Pergunta não é clara

Sua pergunta é confusa.

Você pode estar confuso sobre o significado de fusos horários. Como disse as respostas corretas de Jesper e Affe, a mudança de fusos horários não muda o ponto na linha do tempo do universo. Suponha que Bob, em Nova York, ligue para Susan em Reykjavík Islândia. A Islândia usa o UTC como fuso horário o ano todo. Bob e Susan estão falando um com o outro no mesmo momento. Mas se Bob olhar para o relógio na parede, ele vê um horário exibido 5 horas antes de um relógio na parede de Susan. Nova York tem um compensado de cinco horas atrás da UTC (-5: 00).

Outro problema com sua pergunta: você também fala sobre um deslocamento de fuso horário das 5:00 e um deslocamento das 5:30. Qual é? Ou você tem dois fusos horários em mente e GMT/UTC?

Joda-Time

Vou fazer uma facada para lhe dar um pouco de código -fonte de exemplo.

o Joda-Time A biblioteca facilita a data do trabalho.

// © 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 );

Quando correr ...

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

Sobre Joda-Time…

// 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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top