Question

J'ai une date, 2010-08-23 13:30:00 -0400 et je suis en train de l'obtenir dans le fuseau horaire UTC +2. La différence en quelques secondes est 21600, mais quand je l'appelle [[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate];, je reçois 2010-08-24 01:30:00 +0200 qui devrait être 2010-08-23 19:30:00 +0200. Toute idée de ce que je fais mal?

Était-ce utile?

La solution

Un objet date représente un moment précis dans le temps, quel que soit ce que les différentes horloges des gens auraient pu dire à ce moment-là.

Fuseau horaire se impliquer lorsque vous souhaitez afficher la date, puisque vous allez afficher en général ce que l'horloge de l'utilisateur aurait dit (ou dit, ou vous dire) à ce moment-là. C'est exactement ce qui se passe lorsque vous NSLog un NSDate. Description de la date est ce moment de temps représenté dans votre fuseau horaire local

Ajout ou soustraction d'un NSDate est pas le temps de conversion de zone. produire addition et de soustraction NSDates représentant autre moments dans le temps; dans votre cas, vous créez un NSDate un instant 6 heures plus tard, à partir du moment que vous avez commencé avec, pas au même moment de l'autre côté de la planète.

Pour simplifier, la conversion de fuseau horaire est à la recherche à en même temps différents points dans l'espace (différentes sections de la surface de la planète), tandis que l'addition de la date et la soustraction sont < em> de calcul différents temps .

Il n'y a pas de conversion de fuseau horaire pour un NSDate, parce que ce n'est pas dans un fuseau horaire pour commencer. Une zone de temps ne devient impliqué lorsque vous formatez la date de ce fuseau horaire. Ainsi, pour afficher cette date dans un autre fuseau horaire, il suffit de faire cela. En règle générale, ce moyen alimentant la zone horaire souhaité à votre Date formatter .

Autres conseils

Je vois que la date vous a un retour +200 différent fuseau horaire non de -400. Si vous remarquez, vous verrez que ce résultat est exactement 12 heures (ou 6 heures + 6 heures) plus tard que la date initiale. Avez-vous par hasard modifier les paramètres régionaux aussi bien quand vous avez fait la nouvelle date? Lorsque vous avez fait le changement qui a commencé à donner vous +200 au lieu de -400 le système réglé automatiquement le temps pour compenser, alors vous avez ajouté 6 heures à la date. NSDate stocke toutes les dates comme un intervalle de temps depuis le 1 janvier 2001 et GMT Pour l'obtention timezones au besoin.

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