2010-10-10 4 views
9

J'ai actuellement un appel API me retourner une date/heure au format: 2010-10-10T07:54:01.878926iPhone: GMT NSDate convertir à l'heure locale

Puis-je suppose que cela est GMT? J'ai également converti ceci en un objet NSDate. Est-il possible d'utiliser l'heure locale de l'iPhone pour recalculer l'heure?

Répondre

29
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm"; 

NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 
[dateFormatter setTimeZone:gmt]; 
NSString *timeStamp = [dateFormatter stringFromDate:[NSDate date]]; 
[dateFormatter release]; 
+0

fonctionne comme un charme ... merci! :) – unicornherder

+5

Comment est-ce que cela convertit GMT en heure locale? Je crois que c'est faire le contraire et convertir local à GMT non? – willhblackburn

1
NSDate *sourceDate = [NSDate dateWithTimeIntervalSince1970:gmtTimestamp]; 
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone]; 
NSInteger sourceGMTOffset = [destinationTimeZone secondsFromGMTForDate:0]; 
NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate]; 
NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset; 
NSDate* destinationDate = [[[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate] autorelease]; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm"; 
[dateFormatter setTimeZone:destinationTimeZone]; 
NSString *localTimeString = [dateFormatter stringFromDate:destinationDate]; 
-2
NSDate *now = [NSDate date]; 
NSLog(@"%@", [now dateWithCalendarFormat:@"%Y-%m-%d %H:%M:%S" 
       timeZone:[NSTimeZone timeZoneWithName:@"GMT"]]); 
+0

Le message '- (NSString *) dateWithCalendarFormat: fuseau horaire:' n'existe pas dans la documentation d'Apple. –

+0

cela donne une erreur .. avez-vous essayé? –

17
NSDate* localDateTime = [NSDate dateWithTimeInterval:[[NSTimeZone systemTimeZone] secondsFromGMT] sinceDate:pubDate]; 
+0

C'est génial. Il résout mon problème –

+0

** Swift **: 'let localDate = NSDate (timeInterval: NSTimeInterval (NSTimeZone.systemTimeZone(). SecondesFromGMT), puisqueDate: date)' – Husam