2011-01-07 8 views
13

J'ai deux horodatages qui décrivent le même instant dans deux formats différents.Date d'analyse avec Joda avec fuseau horaire

2010-10-03 18:58:07 et 2010-10-03T16:58:07.000+02:00.

J'analyse les horodatages avec deux formats de date différents avec Joda. À la fin je veux avoir deux objets DateTime qui sont égaux en termes d'être le même instant de temps. Le format DateFormatter offre plusieurs méthodes pour contrôler les fuseaux horaires et les paramètres régionaux, mais je n'ai pas réussi à le faire fonctionner.

Voici le code que je voudrais travailler:

final String date1 = "2010-10-03 18:58:07"; // Europe/Berlin local time 
    final DateTimeFormatter formatter1 = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); 
    final DateTime dateTime1 = formatter1.parseDateTime(date1); 

    final String date2 = "2010-10-03T16:58:07.000+02:00"; // Europe/Berlin local time with time zone 
    final DateTimeFormatter formatter2 = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 
    final DateTime dateTime2 = formatter2.parseDateTime(date2); 

    Assert.assertTrue(dateTime1.isEqual(dateTime2)); 

Merci à l'avance si quelqu'un peut me aider!

Répondre

6

Si votre fuseau horaire par défaut est Europe/Berlin, 2010-10-03 18:58:07 correspond à 2010-10-03T16: 58: 07.000 + 00: 00.

Vous avez probablement mal compris le champ de fuseau horaire dans la représentation sous forme de chaîne. Votre horodatage 2010-10-03T16: 58: 07.000 + 02: 00 signifie que "il est 16:58:07 dans un fuseau horaire avec décalage de +2 heures par rapport à GMT", ou dans un autre libellé "il est maintenant 16 : 58:. 07 à Berlin » Je suppose que vous vous attendiez à dire que c'est 16:58:07 GMT

+0

Vous avez un type dans "2010-10-03T16: 58: 07.000 + 02: 00 signifie qu'il n'est pas 16:58:07 dans un fuseau horaire avec un décalage de +2 heures par rapport à GMT)". Il doit indiquer: "2010-10-03T16: 58: 07.000 + 02: 00 signifie qu'il est 16:58:07 dans un fuseau horaire avec un décalage de +2 heures par rapport à l'heure UTC)" – MicSim

+0

Oui, je m'attendais à ce que ce soit 16 : 58: 07 GMT. Ensuite, il semble que les horodatages sont juste brisés. Ce sont des horodatages provenant de deux fichiers journaux différents de différents serveurs. Et je suis sûr qu'ils spécifient le même événement. C'est ainsi que ma confusion est venue. – wilfried

+0

@MacSim: Bien sûr, j'ai écrit un peu trop vite là-bas. – jarnbjo

4

Vos deux horodatages ne représentent pas le même instant dans le temps (comme jambjo déjà remarqué) Voir Time zone as offsets from UTC?.

Voir également la documentation parseDateTime Si vous ne fournissez aucun fuseau horaire, alors le fuseau horaire par défaut sera appliqué (c'est le fuseau horaire GMT + 2 de Berlin si vous êtes là). Donc:

  • 2010-10-03 18:58:07 devient 2010-10-03T18:58:07.000+02:00 (18:58 à Berlin avec décalage de 2 heures à l'UTC, ce qui signifie 16:58 en UTC) comme prévu.
  • 2010-10-03T16:58:07.000+02:00 reste comme il est, parce qu'il ya un fuseau horaire prévu (c.-à-16:58 à Berlin avec décalage de 2 heures à UTC, cela signifie 14h58 UTC)

espère que vous avez l'idée . Vous devrez ajuster les heures avec la méthode withZone pour obtenir les résultats souhaités.

Questions connexes