Have you tried converting the time to it's NSDateComponents? you can then recreate an NSDate from it regardless of the time zone.
Edited to add
// This is just so I can create a date from a string. NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss z"]; // Create a date as recorded in a timezone that isn't mine. NSDate *localDate = [formatter dateFromString:@"2012-10-30 10:30:00 +0200"]; NSLog(@"Initial Date: %@", localDate); // this logs 2012-10-30 08:30:00 +0000 // Which is what you would expect, as the original time was 2 hours ahead NSDateComponents *components = [[NSDateComponents alloc] init]; NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; components = [gregorian components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit fromDate:localDate]; NSLog(@"Components: %@", components); // Create a date from these time components in some other time zone [gregorian setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"EST"]]; NSDate *newDate = [gregorian dateFromComponents:components]; NSLog(@"New Date: %@", newDate); // This logs 2012-10-30 12:30:00 +0000 // Which is the local EST of 8:30 am expressed in UTC
Which demonstrates how I can turn make 8:30 am in +2 time zone look the same as for a -4 timezone.