Analyse de date / heure dans iOS: comment traiter (ou ne pas gérer) les fuseaux horaires?
J'ai un ASP.NET MVC 3 site web qui communique avec mon application iOS via JSON. Dans le cadre de la objets envoyés dans la réponse JSON, j'ai les dates dans le format de yyyy-MM-dd HH:mm:ss ZZZ
les sorties qui 2011-04-05 16:28:22 -07:00
. Comment dois-je analyser que dans iOS?
C'est le code je suis de déconner avec le droit maintenant:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZ"];
[dateFormatter setTimeZone:[NSTimeZone localTimeZone]];
NSDate *date = [dateFormatter dateFromString:@"2011-04-05T16:28:22-0700"];
NSLog(@"%@; %@; %@", dateFormatter, date, [NSTimeZone localTimeZone]);
Première chose à noter est que 2011-04-05 16:28:22 -07:00
a ressembler 2011-04-05T16:28:22-0700
où un T
remplace le premier espace (en supposant que signifie le temps, ou lorsque le temps de la partie de la chaîne de caractères commence par?), le deuxième espace est supprimé et les deux points dans le temps de la zone est supprimée. Je me dis que je vais trouver un moyen de formater la chaîne .NET est de l'envoi de retour pour se conformer à la chaîne iOS va analyser.
Le vrai problème est que la date de sortie est de 7 heures à l'avance de ce que j'ai envoyé dans la réponse JSON. Donc, iOS sorties 2011-04-05 16:28:22 -07:00
comme 2011-04-05 23:28:22 +0000
et ce n'est pas aussi loin que mon application est concerné.
La seule solution que j'ai trouvé jusqu'à présent est d'envoyer la date dans le JSON comme 2011-04-05 16:28:22 +00:00
mais c'est de nouveau faux, parce que je suis en modifiant la date réelle devrait être.
De toute façon, je vous en serais reconnaissant à quelqu'un de prendre un coup d'oeil et me laisser savoir comment je peux analyser la chaîne de date .NET est sortie via le format yyyy-MM-dd HH:mm:ss ZZZ
(qui, je suppose, peut être ré-écrit pour yyyy-MM-ddTHH:mm:ssZZZ
) à un NSDate
objet que je peux utiliser dans iOS.
source d'informationauteur Gup3rSuR4c
Vous devez vous connecter pour publier un commentaire.
Je ne sais pas comment le droit, c'est, mais j'ai finalement trouvé que dans .NET que j'ai à faire
DateTime.ToUniversalTime().ToString("yyyy-MM-ddHH:mm:ss")
et sur l'iOS côté j'ai pour ce faire:C'est uniquement à la date correcte lors de la
NSLog
sorties, donc je suppose que j'ai enfin une bonne date/heure.Votre iOS date code d'analyse est correcte:
2011-04-05 16:28:22 -07:00
et2011-04-05 23:28:22 +0000
représentent le même temps, seulement dans des fuseaux horaires différents. Votre seul problème est que NSDate n'a pas fait enregistrer le fuseau horaire, et ainsi de[date description]
sorties à l'aide de l'UTC.Vous êtes presque certainement préférable d'utiliser simplement de l'heure UTC partout pour les échanges et ne pas s'embêter avec les fuseaux horaires. Je suis sûr que vous pouvez obtenir votre ASP.NET code pour le faire, et c'est plus facile à analyser sur la fin de réception. NSDateFormatter utilise le standard Unicode formatage de la date de la syntaxe, que vous pouvez lire sur ici.