NSDate exprimé dans des fuseaux horaires différents, c'est à dire l'heure locale (GMT-400) PST

Je sais comment les utiliser NSTimeZone pour dériver le décalage de l'heure actuelle dans un autre fuseau horaire. NSDate retourne toujours par rapport à l'heure GMT, alors comment puis-je tirer d'une chaîne avec le bon fuseau horaire de l'information? c'est à dire je prends le temps actuel, où je suis (dans l'est) et à l'aide de NSTimeZone finissent en soustrayant les 3 heures est nécessaire de représenter le temps dans le PST. Mais tout ce que j'ai fait est de soustraire de 3 heures à partir du moment qui est toujours représenté par rapport à mon fuseau horaire. Comment puis-je obtenir NSDateFormatter à cracher le temps en utilisant le fuseau horaire de destination?

Punaise j'ai essayé était:

NSCalendar *cal = [NSCalendar currentCalendar];
NSDate *now = [NSDate date];
NSTimeZone *tz = [NSTimeZone timeZoneForSecondsFromGMT:(-8 * 3600)]; //for PST
NSDateComponents *dc = [cal components: NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:now];
[cal setTimeZone:tz];
NSDate *newDate = [cal dateFromComponents:dc];

Pas d'amour. Je pourrais prendre l'individuelle date de composants et de composer une chaîne de caractères, mais il ne serait pas localisable.

Un problème connexe:

NSTimeZone *tz = [NSTimeZone timeZoneForSecondsFromGMT:(-8 * 3600)]; //for PST
NSString *abbreviation = [tz abbreviation];
NSString *name = [tz name];

Les deux abbreviation et name finit par revenir GMT-0800, pas PST comme je l'avais espérer. Donc, je ne pouvais même pas faire la dessus si je le voulais. Ce que je fais mal?

OriginalL'auteur rsswtmr | 2010-03-23