2015-04-27 2 views
0

Я работаю над приложением, в котором пользователь установил время для выполнения задачи, и до 10 или 15 минут приложение запускает будильник. Как и напоминание, вы можете сказать.Как вычитать время из NSDate с помощью NSDateFormatter?

После многого поиска на stackOverFlow и других различных ссылках моя проблема все еще существует. Вот что я делаю:

-(void)timeWasSelected:(NSDate *)selectedTime element:(id)element { 

    if((UITextField *)element == self.timeForTask){ 
     NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
     [dateFormatter setDateFormat:@"hh:mm a"]; 
     self.textField.text = [dateFormatter stringFromDate:selectedTime]; 
     [defaults setObject:self.textField.text forKey:@"taskTime"]; 
     myTime = [selectedTime dateByAddingTimeInterval:-600]; 
     NSLog(@"New Time %@",myTime); 
    } 

После выполнения этого NSLog часть дает этот вывод: New Time 2015-04-27 06:14:14 +0000

Проблема заключается в том, что я выбрал раз, 11:22AM и это хранящий 06:14 и я только вычитается 10min с выбранного времени.

+2

Это время в GMT. Вы получаете подходящее время. –

+0

«Я только вычитал 10 секунд из выбранного времени». Я думаю, что вы вычитаете -600 секунд, что составляет 10 минут. –

+0

в симуляторе время всегда отображается на 5 часов 30 минут меньше, но когда вы проверяете его с помощью точки останова, оно отображает правильное время, которое вы выбрали для правильного времени, которое вы должны установить для часового пояса. –

ответ

0

Попробуйте это вы получите результат:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"hh:mm a"]; 
    NSDate* selectedTime = [dateFormatter dateFromString:@"11:22 AM"]; 
    NSDate* myTime = [selectedTime dateByAddingTimeInterval:-60*10];//10 minute deduction 
    NSString* updateTime = [dateFormatter stringFromDate:myTime]; 
    NSLog(@"New Time %@",updateTime); 

Выход:

Новое время 11:12 утра

Здесь вы вычитаем 10 минут от выбранного времени. если вы хотите 15 минут, замените их на 10 цифр.

Надеюсь, это поможет вам.

+0

@ Talha Ch, спасибо за вашу оценку. –

0

// дает новый объект даты со временем 15 минут назад

NSDate *newDate = [oldDate dateByAddingTimeInterval:-60*15]; 
    NSString* NewTime = [dateFormatter stringFromDate:newDate]; 
    NSLog(@"New Time %@",newDate); 

Этот код будет точно получить вам 15 минут раньше времени

0

Попробуйте это, может помочь вам,

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"hh:mm a"]; 
NSLog(@"1New Time %@",[dateFormatter stringFromDate:selectedTime]); 
self.textField.text = [dateFormatter stringFromDate:selectedTime]; 
[defaults setObject:self.textField.text forKey:@"taskTime"]; 
NSTimeZone *destinationTimeZone = [NSTimeZone systemTimeZone]; 
[dateFormatter setTimeZone:destinationTimeZone]; 
NSDate *myTime = [selectedTime dateByAddingTimeInterval:-600]; 
NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init]; 
[dateFormatter1 setTimeZone:destinationTimeZone]; 
[dateFormatter1 setDateFormat:@"yyyy-MM-dd hh:mm:ss ZZ"]; 
NSLog(@"2New Time %@",[dateFormatter1 stringFromDate:myTime]); 

Наслаждайтесь кодированием!

Смежные вопросы