2013-11-22 2 views
0

Привет, У меня есть таймер обратного отсчета в моем приложении, и я ищу способ взять дату своего временного штампа и изменить его на основе часового пояса без его форматирования. Метки времени GMT и это выглядит следующим образом:Временная метка обратного отсчета обновления В соответствии с часовым поясом

theDate = [NSDate dateWithTimeIntervalSince1970:1387929601]; 

Тогда у меня обратный отсчет форматировщик здесь:

-(void)updateCountdownText 
{ 
     //Update the Countdown Label 
     NSCalendar *calendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]; 
     int units = NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit; 
     NSDateComponents *components = [calendar components:units fromDate:[NSDate date] toDate:theDate options:0]; 
     [dateLabel setText:[NSString stringWithFormat:@"%d%c %d%c %d%c %d%c", [components day], 'd', [components hour], 'h', [components minute], 'm', [components second], 's']]; 

    } 

Так как я уже форматирование метки ниже все, что я хотел бы сделать, это принять номер метки времени GMT и преобразовать его в соответствии с местным часовым поясом. Поэтому я хотел бы добавить код часового пояса до dateWithTimeInterval, а затем изменить это число (сохраняя отметку времени) в соответствии с часовым поясом. Это возможно? Благодаря!

+0

Почему вы не используете 'NSDateFormatter' и вы получите правильный часовой пояс и параметры форматирования бесплатно? – Pfitz

ответ

0

Используйте NSDateFormatter, чтобы получить правильный часовой пояс вашего объекта theDate.

NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; 
[formatter setTimeZone:[NSTimeZone localTimeZone]; 
0

NSTimeZone имеет свойство secondsFromGMT. Поэтому вы можете использовать [NSTimeZone systemTimeZone].secondsFromGMT;, чтобы получить разницу, добавить ее в свой временной интервал и создать дату.

1

Попробуйте это:

 //Timestamp convert to NSDate 
     double time=[myString doubleValue];//in yourcase [email protected]"1387929601"; mystring is timestamp 
     NSTimeInterval interval =time ; 
     NSDate *online = [NSDate dateWithTimeIntervalSince1970:interval]; 
     NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
     [dateFormatter setDateFormat:@"hh:mm a dd-MMM-yyyy"]; 
     NSLog(@"Timestamp date is: %@", [dateFormatter stringFromDate:online]); 

     NSString *mystr=[dateFormatter stringFromDate:online]; 
     NSCalendar *cal = [NSCalendar currentCalendar]; 
     NSDate *now = [dateFormatter dateFromString:mystr]; 

     value1=([[NSTimeZone localTimeZone] secondsFromGMT]); 
     value1=value1/3600; 
     float value123=((value1) * 3600); 

     NSTimeZone *tz = [NSTimeZone timeZoneForSecondsFromGMT:(value123)]; // for PST 
     NSDateComponents *dc = [cal components: NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit fromDate:now]; 
     [cal setTimeZone:tz]; 

     NSDate *newDate = [cal dateFromComponents:dc]; 
     NSDateFormatter *dateFormatter1 = [[[NSDateFormatter alloc] init] autorelease]; 
     [dateFormatter1 setDateFormat:@"hh:mm a dd-MMM-yyyy"]; 

     NSLog(@"result: %@", [dateFormatter1 stringFromDate:newDate]); 

Пусть это будет работать для вас.

счастливым кодирования ...

0

Форматирование NSDate для корректировки часового пояса:

NSTimeZone *tz = [[NSTimeZone timeZoneForSecondsFromGMT:(-8 * 3600)]; 
[dateFormatter setTimeZone:tz]; 
NSString* s = [dateFormatter stringFromDate:now]; 
Смежные вопросы