2013-08-13 12 views
6

In Java, come analizzare "Wed, 05 Jun 2013 00:48:12 GMT" in un oggetto Date, quindi stampare l'oggetto data nello stesso formato.Come analizzare una stringa formattata nell'oggetto Date in Java

Ho provato questo:

String dStr= "Wed, 05 Jun 2013 00:48:12 GMT"; 
SimpleDateFormat ft = new SimpleDateFormat ("E, dd MMM yyyy hh:mm:ss ZZZ"); 
Date t = ft.parse(dStr); 
System.out.println(t); 
System.out.println(ft.format(t)); 

Il risultato è

Wed Jun 05 10:48:12 EST 2013 
Wed, 05 Jun 2013 10:48:12 +1000 

Grazie in anticipo:

+0

Questo produce veramente una differenza di 10 ore, oppure quel pezzo di testo è stato copiato male? –

+0

@MartijnCourteaux No, sembra semplicemente che venga emesso nel fuso orario locale. –

+0

Ah, ora vedo :) Ero confuso con +100 anziché +1000. Quale sarebbe stata ancora un'ora ... –

risposta

1

questo risolve il problema:

import java.text.*; 
import java.util.*; 

public class DateIt{ 
    public static void main(String [] args) throws Exception{ 
     String dStr= "Wed, 05 Jun 2013 00:48:12 GMT"; 
     SimpleDateFormat ft = new SimpleDateFormat ("E, dd MMM yyyy HH:mm:ss z"); 
     Date t = ft.parse(dStr); 
     TimeZone gmt = TimeZone.getTimeZone("England/London"); 
     ft.setTimeZone(gmt); 
     System.out.println(t); 
     System.out.println(ft.format(t)); 
     } 
} 
+0

grazie, io uso il tuo codice, ma il risultato è "Mer, 05 giu 2013 12:48:12 GMT", che è diverso dalla stringa di input "Mer, 05 Jun 2013 00:48:12 GMT" Qualsiasi altro suggerimento qui? – user1304846

+0

La riga 7 ha 'HH' invece di 'hh'? 'HH' restituirà il ora in notazione a 24 ore. – Clocks

+0

hai ragione, stavo usando "hh", dopo averlo cambiato in "HH", quindi tutto funziona ok Molte grazie. – user1304846

1

Sembra che si desidera zzz piuttosto che ZZZ. Questo dovrebbe aiutarti a leggere/scrivere il tuo fuso orario come un codice piuttosto che un numero.

4

Non è un errore, sia: Wed, 05 Jun 2013 00:48:12 GMT e Wed, 05 Jun 2013 00:48:12 GMT rappresentare nello stesso tempo, il primo è GMT (Grenweech) e il secondo è lo stesso tempo in Australia (EST), non vi resta che configurare il vostro fuso orario correttamente.

Se si desidera stampare alla stessa data del GMT, aggiungere questa riga di codice:

ft.setTimeZone(TimeZone.getTimeZone("GMT")); 

Ora, se si desidera che anche la data da stampare con il fuso orario come "GMT", invece di "0000", follow @HewWolff rispondere (uso zzz invece di zZZ)

+0

La domanda è: l'OP vuole emettere per usare il fuso orario dalla stringa di input originale o utilizzare un fuso orario fisso (ad esempio GMT)? Immagino che [setTimeZone] (http://docs.oracle.com/javase/7/docs/api/java/text/DateFormat.html#setTimeZone%28java.util.TimeZone%29) sia probabilmente parte della soluzione, ma per prima cosa dobbiamo conoscere il problema esatto. –

+0

Ovviamente quelle due stringhe rappresentano lo stesso tempo - sono identiche ... – DannyMo

+0

@Mattias Buelens, intendo emettere l'input originale String in un fuso orario fisso (come GMT), Che tipo di data e ora dovrei usare Qui. Il risultato atteso dovrebbe essere lo stesso di "Mer, 05 Jun 2013 00:48:12 GMT". Grazie. – user1304846

0

Ugh - ho incontrato questo problema prima.

Il metodo SimpleDateFormat.parse(String) (presumo) utilizza un'istanza di Calendar. Questo è importante per due motivi:

  1. Non sai che sapore del Calendario hai a che fare con (Gregoriano Maya Vegan???).
  2. Il calendario inizializza i suoi campi con i valori predefiniti che non si desidera necessariamente impostare. Quando il numero SimpleDateFormat chiama getTime() nell'istanza di Calendar che ha creato per restituire una data, tale data avrà valori di campo predefiniti che non sono indicati dalla stringa inviata per iniziare.

Questi valori predefiniti hanno un impatto quando viene effettuata la chiamata ft.format(t). L'unico modo per risolvere questo problema che ho trovato è quello di lavorare direttamente con la classe Calendar (che è completamente non banale, BTW.) Proverò a fornire un esempio di codice più tardi quando avrò più tempo. Nel frattempo, guarda javafx.util.converter.DateStringConverter.

Problemi correlati