Domanda

Ho una stringa da un'intestazione di posta elettronica, come Data: lun, 27 ott 2008 08:33:29 -0700 . Quello di cui ho bisogno è un'istanza di GregorianCalendar, che rappresenterà lo stesso momento. Facile come quello: come posso farlo?

E per i più veloci, questo non funzionerà correttamente:

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

perché normalizzerà il fuso orario su UTC (o l'ora della macchina locale, a seconda della versione di Java). Quello di cui ho bisogno è calendar.getTimeZone (). GetRawOffset () per restituire -7 * milisInAnHour .

È stato utile?

Soluzione

Consiglierei di consultare la libreria di Joda Time, se questa è un'opzione. Normalmente sono contrario all'utilizzo di una libreria di terze parti quando la piattaforma principale offre funzionalità simili, ma l'ho fatta un'eccezione perché l'autore di Joda Time è anche dietro JSR310, e alla fine Joda Time verrà praticamente implementato in Java 7.

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

Quindi, se Joda Time è un'opzione, qualcosa come questo dovrebbe funzionare:

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

Spero che questo aiuti.

Altri suggerimenti

  

E per i più veloci, questo non funzionerà correttamente ...   perché normalizzerà il fuso orario su UTC (o l'ora della macchina locale, a seconda della versione di Java). Quello di cui ho bisogno è calendar.getTimeZone (). GetRawOffset () per restituire -7 * milisInAnHour.

Beh, tecnicamente funziona, perché mentre restituirà un oggetto con TimeZone uguale al TimeZone di sistema corrente, il tempo verrà modificato per tenere conto dell'offset.

Questo codice:

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

uscite:

  

data analizzata: lun 27 ott 11:33:29 EDT 2008

che tecnicamente è corretto, dal momento che il mio fuso orario del sistema è EDT / UTC meno quattro ore (che è tre ore avanti rispetto al tuo). Se esprimi il tempo come numero di millisecondi dal 1 gennaio 1970, 00:00:00 GMT (che è come l'oggetto Date memorizza la sua data / ora), allora queste date / ore sono uguali, è solo il TimeZone che è diverso.

Il tuo problema è davvero Come posso convertire una Data / Calendario nel mio fuso orario? Per questo, dai un'occhiata alla mia risposta alla domanda precedente Come gestire i fusi orari del calendario usando Java?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top