2011-11-02 5 views
0

Je suis le chargement en date de mon service Web, je vous envoie les dates au format GMT) (heures: 02/11/11 10:56:09Créer NSDate fuseau horaire question

Je crée une forme NSDate cela en utilisant NSDateFormatter comme tel:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"dd/MM/yyyy HH:mm:ss"]; 
NSDate *journeyDate = [dateFormatter dateFromString:str]; 
[dateFormatter release]; 

cela fonctionne très bien, après je compare cela à la date actuelle pour obtenir des intervalles de temps relatifs. Le problème est que lorsque le téléphone est configuré dans un autre fuseau horaire, lorsque je charge la date depuis mon API et que j'utilise le formateur de date, ce qui semble se passer est que le téléphone suppose que la chaîne de date est l'heure locale et il convertit en GMT.

Exemple:

je charge une date avec l'heure 10 heures du api. Le téléphone est réglé sur PDT. Le formateur de date crée un NSDate en supposant que ma chaîne de date à 10h est réellement pertinente pour le téléphone. Je me retrouve avec une date et une heure égales à 17 heures, en ajoutant 10 heures.

Je suis en train de préciser dans ma formatter date que la chaîne est GMT, mais je vais avoir du mal, je l'ai essayé ce qui suit, en ajoutant GMT au format:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"dd/MM/yyyy HH:mm:ss GMT"]; 
NSDate *journeyDate = [dateFormatter dateFromString:str]; 
[dateFormatter release]; 

Ce ne fonctionne pas .

Quelqu'un peut-il donner des conseils?

Solution

Juste un récapituler, je l'ai travaillé avec un terrible travail autour de annexant GMT à la chaîne d'origine, et la mise en forme:

NSString * cheat = [NSString stringWithFormat:@"%@ GMT", str]; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"dd/MM/yyyy HH:mm:ss zzzz"]; 
NSDate *journeyDate = [dateFormatter dateFromString:cheat]; 
[dateFormatter release]; 
return journeyDate; 

Ce fut une sorte de hack instable, car si la chaîne était modifiée pour inclure un fuseau horaire, cela ne fonctionnerait plus. Pour ceux qui ont besoin de faire comme moi, ce qui suit est juste un exemple rapide sur la façon de créer un NSTimeZone.

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"dd/MM/yyyy HH:mm:ss"]; 
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]]; 
NSDate *journeyDate = [dateFormatter dateFromString:str]; 
[dateFormatter release]; 
return journeyDate; 

Merci pour l'aide rapide.

Répondre

1

Je suppose que vous voulez juste utiliser NSDateFormatter.setTimeZone pour le forcer à utiliser UTC. Vous ne voulez pas changer le format chaîne parce que probablement la chaîne n'inclut pas les lettres "GMT" - à la place, vous voulez changer quel fuseau horaire la chaîne est interprétée, ce qui est ce que setTimeZone fera.

Questions connexes