Obtenga la fecha y la hora de la zona horaria del dispositivo iPhone actual desde la fecha y hora de la zona horaria UTC-5 de la aplicación iPhone.

En mi aplicación para iPhone, tengo muchas dificultades para convertir el tiempo de respuesta del servicio web a la hora actual del dispositivo. El webservice time in UTC-5 timezone . La aplicación es una aplicación de uso mundial. Así que tengo que convertir el tiempo de respuesta a la zona horaria del dispositivo actual. Esta es una aplicación de mensajería simple.

Cuando he enviado un message the time is "5:05 PM" (India Chennai timezone) pero cuando webservice is "2012-07-16 07:33:01" tiempo del servicio webservice is "2012-07-16 07:33:01" . Cuando muestro el tiempo en la aplicación, debo convertir la hora a la hora local del dispositivo. Lo he intentado de alguna manera, pero aún no puedo resolverlo. El código es:

 NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init]; [dateFormatter1 setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; [dateFormatter1 setLocale:[NSLocale currentLocale]]; //[dateFormatter1 setTimeZone:[NSTimeZone timeZoneWithName:@"IST"]]; [dateFormatters setTimeZone:[NSTimeZone systemTimeZone]]; NSDate *date = [dateFormatter1 dateFromString:dateStr]; NSLog(@"date : %@",date); 

Pero la fecha y la hora de salida son 2012-07-16 02:03:01 +0000 He almacenado esta fecha / hora en Coredata y cuando he recuperado de CoreData y CoreData encubierto a NSString usando el siguiente código,

 NSDateFormatter *dateFormatters = [[NSDateFormatter alloc] init]; [dateFormatters setDateFormat:@"dd-MMM-yyyy hh:mm"]; [dateFormatters setDateStyle:NSDateFormatterShortStyle]; [dateFormatters setTimeStyle:NSDateFormatterShortStyle]; [dateFormatters setDoesRelativeDateFormatting:YES]; [dateFormatters setTimeZone:[NSTimeZone systemTimeZone]]; dateStr = [dateFormatters stringFromDate:dateString]; NSLog(@"DateString : %@", dateStr); 

La fecha y hora de salida es ” Today 7:33 AM “. Debería mostrarse ” Today 5:05 PM “. ¿Puede alguien salvarme el día? Por favor ayuda a resolver este problema. Gracias por adelantado.

He probado su escenario y he agregado un código para su referencia. Por favor, prueba el siguiente y házmelo saber que es útil para ti.

 NSString *dateStr = @"2012-07-16 07:33:01"; NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init]; [dateFormatter1 setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSDate *date = [dateFormatter1 dateFromString:dateStr]; NSLog(@"date : %@",date); NSTimeZone *currentTimeZone = [NSTimeZone localTimeZone]; NSTimeZone *utcTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"]; NSInteger currentGMTOffset = [currentTimeZone secondsFromGMTForDate:date]; NSInteger gmtOffset = [utcTimeZone secondsFromGMTForDate:date]; NSTimeInterval gmtInterval = currentGMTOffset - gmtOffset; NSDate *destinationDate = [[[NSDate alloc] initWithTimeInterval:gmtInterval sinceDate:date] autorelease]; NSDateFormatter *dateFormatters = [[NSDateFormatter alloc] init]; [dateFormatters setDateFormat:@"dd-MMM-yyyy hh:mm"]; [dateFormatters setDateStyle:NSDateFormatterShortStyle]; [dateFormatters setTimeStyle:NSDateFormatterShortStyle]; [dateFormatters setDoesRelativeDateFormatting:YES]; [dateFormatters setTimeZone:[NSTimeZone systemTimeZone]]; dateStr = [dateFormatters stringFromDate: destinationDate]; NSLog(@"DateString : %@", dateStr); 

Gracias.

 NSDate* currentDate = [NSDate date]; NSTimeZone* CurrentTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; NSTimeZone* SystemTimeZone = [NSTimeZone systemTimeZone]; NSInteger currentGMTOffset = [CurrentTimeZone secondsFromGMTForDate:currentDate]; NSInteger SystemGMTOffset = [SystemTimeZone secondsFromGMTForDate:currentDate]; NSTimeInterval interval = SystemGMTOffset - currentGMTOffset; NSDate* TodayDate = [[NSDate alloc] initWithTimeInterval:interval sinceDate:currentDate]; NSLog(@"Current time zone Today Date : %@", TodayDate); 

Swift 4

 var currentDate = Date() var CurrentTimeZone = NSTimeZone(abbreviation: "GMT") var SystemTimeZone = NSTimeZone.system as NSTimeZone var currentGMTOffset: Int? = CurrentTimeZone?.secondsFromGMT(for: currentDate) var SystemGMTOffset: Int = SystemTimeZone.secondsFromGMT(for: currentDate) var interval = TimeInterval((SystemGMTOffset - currentGMTOffset!)) var TodayDate = Date(timeInterval: interval, since: currentDate) print("Current time zone Today Date : \(TodayDate)") 

Espero que ayude a otros desarrolladores! Feliz Codificación!

Que esta extensión sea más fácil.

Swift 4 : UTC / GMT ⟺ Local (Actual / Sistema)

 extension Date { // Convert local time to UTC (or GMT) func toGlobalTime() -> Date { let timezone = TimeZone.current let seconds = -TimeInterval(timezone.secondsFromGMT(for: self)) return Date(timeInterval: seconds, since: self) } // Convert UTC (or GMT) to local time func toLocalTime() -> Date { let timezone = TimeZone.current let seconds = TimeInterval(timezone.secondsFromGMT(for: self)) return Date(timeInterval: seconds, since: self) } } // Try it let utcDate = Date().toGlobalTime() let localDate = utcDate.toLocalTime() print("utcDate - (utcDate)") print("localDate - (localDate)")