Pergunta

Eu tenho uma string de um cabeçalho de e-mail, como Date: Mon, 27 Oct 2008 08:33:29 -0700. O que eu preciso é uma instância de GregorianCalendar, que irá representar o mesmo momento. Tão fácil como isso - como faço para fazê-lo

E para os mais rápidos - isto é não indo para trabalho corretamente:

SimpleDateFormat format = ... // whatever you want
Date date = format.parse(myString)
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date)

porque vai normalizar o fuso horário para UTC (ou seu tempo de máquina local, dependendo da versão do Java). O que eu preciso é calendar.getTimeZone (). GetRawOffset () para retornar -7 * milisInAnHour.

Foi útil?

Solução

Eu recomendo olhar para a biblioteca Joda Time, se isso é uma opção. Normalmente sou contra o uso de uma biblioteca de terceiros quando a plataforma central fornece uma funcionalidade semelhante, mas eu fiz isso uma exceção porque o autor do Joda Time, também está por trás JSR310, e Joda O tempo está basicamente vai ser enroladas em Java 7 eventualmente.

http://joda-time.sourceforge.net/

De qualquer forma, se Joda O tempo é uma opção, algo como isto deve trabalho:

DateTimeFormatter formatter =
    DateTimeFormat.forPattern("your pattern").withOffsetParsed();
DateTime dateTime = formatter.parseDateTime("your input");
GregorianCalendar cal = dateTime.toGregorianCalendar();

Espero que isso ajude.

Outras dicas

E para os mais rápidos - isto não vai funcionar corretamente ... porque ele vai normalizar o fuso horário para UTC (ou seu tempo de máquina local, dependendo da versão do Java). O que eu preciso é calendar.getTimeZone (). GetRawOffset () para retornar -7 * milisInAnHour.

Bem tecnicamente isso não funciona, porque quando ele irá retornar um objeto com fuso horário igual ao fuso horário atual do sistema, o tempo será modificado para conta para o deslocamento.

Este código:

String dateString = "Mon, 27 Oct 2008 08:33:29 -0700";
DateFormat df = new SimpleDateFormat("E, dd MMM yyyy hh:mm:ss Z");
Date parsed = df.parse(dateString);
System.out.println("parsed date: " + parsed);

Calendar newCalendar = Calendar.getInstance();
newCalendar.setTime(parsed);

saídas:

data analisado: Seg 27 outubro 11:33:29 EDT 2008

que tecnicamente está correto, desde o meu fuso horário sistema é EDT / UTC menos quatro horas (que é de três horas à frente do seu). Se você expressar tempo que o número de milissegundos desde 1 de janeiro de 1970, 00:00:00 GMT (que é como o objeto Date armazena de data / hora), então estes data / tempos são iguais, é apenas o fuso horário que é diferente .

?

A sua questão é realmente Como faço para converter uma data / Calendário no meu fuso horário Para isso, dê uma olhada na minha resposta à pergunta anterior como lidar com timeZones calendário usando Java?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top