GMT para conversão de hora local com horário de verão
Do servidor estou recebendo GMT estrutura do tempo (estrutura definida pelo usuário), usando que eu quero convertê-lo em hora local, eu fiz isso, preenchendo o NSDatecomponent com a estrutura recebida, e então eu usei date formattter para obter data de tudo funciona bem, exceto um caso. Se o horário GMT for depois de 3 de novembro (Horário de verão mudança nos EUA) O formatador está produzindo uma diferença horária de 1 hora.
por exemplo: Se o horário pretendido é para Nov-3, 4 PM, após a conversão de GMT para local, a sua entrega é 3 de novembro.
Qualquer ideia de como evitá-lo.
Editar:
// Selected Dates
NSDateComponents *sel_date = [[NSDateComponents alloc]init];
sel_date.second = sch_detail.sel_dates.seconds;
sel_date.minute = sch_detail.sel_dates.mins;
sel_date.hour = sch_detail.sel_dates.hours;
sel_date.day = sch_detail.sel_dates.date;
sel_date.month = sch_detail.sel_dates.month;
sel_date.year = sch_detail.sel_dates.year;
sel_date.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
// Get the Date format.
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[gregorian setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
// Start_date formatter.
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MMM dd, yyyy hh:mm a"];
[dateFormatter setTimeZone:[NSTimeZone localTimeZone]];
NSDate *strt_date_loc = [gregorian dateFromComponents:sel_date];
// Get date string.
NSString *sel_date_time = [dateFormatter stringFromDate: strt_date_loc];+
A string sel_date_time é uma hora a menos do que deveria ser ..
Registro :
strt_date_loc = 2013-11-30 06:56:00 +0000
sel_date_time = 29 de novembro de 2013 22:56 (mas deve ser 23:56)
TimeZone: Palo Alto (EUA)
Conversão Local to gmt:
- (NSDateComponents*) convert_to_gmt_time : (NSDate*) date
{
NSDate *localDate = date;
NSTimeInterval timeZoneOffset = [[NSTimeZone defaultTimeZone] secondsFromGMT];
NSTimeInterval gmtTimeInterval = [localDate timeIntervalSinceReferenceDate] - timeZoneOffset;
NSDate *gmtDate = [NSDate dateWithTimeIntervalSinceReferenceDate:gmtTimeInterval];
NSDateComponents *date_comp = [[NSCalendar currentCalendar] components: NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:gmtDate];
return date_comp;
}
Thanx