Question

J'ai une chaîne d'un en-tête de courrier électronique, telle que Date: lundi 27 octobre 2008 08:33:29 - 0700 . Ce dont j'ai besoin, c'est d'une instance de GregorianCalendar, qui représentera le même moment. Aussi simple que cela - comment puis-je le faire?

Et pour les plus rapides, ceci ne fonctionnera pas correctement:

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

car il normalisera le fuseau horaire au format UTC (ou votre heure de la machine locale, selon la version de Java). Il me faut calendar.getTimeZone (). GetRawOffset () pour retourner -7 * milisInAnHour .

Était-ce utile?

La solution

Je vous conseillerais de consulter la bibliothèque Joda Time, si c'est une option. Je suis normalement opposé à l'utilisation d'une bibliothèque tierce lorsque la plate-forme principale fournit des fonctionnalités similaires, mais j'ai fait une exception, car l'auteur de Joda Time est également à l'origine de JSR310, et Joda Time sera finalement intégré à Java 7.

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

En tout cas, si Joda Time est une option, quelque chose comme ceci devrait fonctionner:

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

J'espère que cela vous aidera.

Autres conseils

  

Et pour les plus rapides, cela ne fonctionnera pas correctement ...   car il va normaliser le fuseau horaire sur UTC (ou votre heure de la machine locale, selon la version de Java). Il me faut calendar.getTimeZone (). GetRawOffset () pour renvoyer -7 * milisInAnHour.

Techniquement, cela fonctionne, car s'il renvoie un objet avec TimeZone égal au TimeZone actuel du système, l'heure sera modifiée pour prendre en compte le décalage.

Ce code:

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

sorties:

  

date analysée: lun 27 oct 11:33:29 HAE 2008

ce qui est techniquement correct, car le fuseau horaire de mon système est EDT / UTC moins quatre heures (soit trois heures de plus que le vôtre). Si vous exprimez l'heure en millisecondes depuis le 1er janvier 1970 à 00:00:00 GMT (c'est ainsi que l'objet Date enregistre sa date / heure), ces dates / heures sont égales, c'est juste le fuseau horaire qui est différent.

Votre problème est vraiment Comment convertir une date / un calendrier dans mon fuseau horaire? Pour cela, consultez ma réponse à la question précédente Comment gérer les fuseaux horaires du calendrier avec Java?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top