2010-10-10 19 views
9

Actualmente tengo una llamada API devolverme una fecha/hora en el formato: 2010-10-10T07:54:01.878926iPhone: NSDate convertir GMT a la hora local

¿Puedo suponer que esto es GMT? También convertí esto a un objeto NSDate. ¿Hay alguna manera de usar la hora local de iPhone para volver a calcular la hora?

Respuesta

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

funciona como un encanto ... gracias! :) – unicornherder

+5

¿Cómo convierte esto GMT a la hora local? Creo que está haciendo lo contrario y la conversión local a GMT ¿verdad? – 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

El mensaje '- (NSString *) dateWithCalendarFormat: timezone:' no existe en la documentación de Apple. –

+0

esto da un error ... ¿lo has probado? –

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

Es genial. Resuelve mi problema –

+0

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

Cuestiones relacionadas