Вопрос по ios, uidatepicker, iphone – Как объединить дату и время от двух UIDatePickers?

13

У меня дваUIDatePickers в моем приложении один режим предназначен для выбора даты, а другой - для режима времени. Я отправил уведомление, когда точная дата и время достигнуты. Я'Я могу запустить напоминание в нужное время, но проблема в том, что дата не проверена. Есть ли способ проверить дату и время одновременно ??

Спасибо заранее ...

редактировать

NSDate *date1 = [datePicker date];
NSDate *date2 = [timePicker date];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

unsigned unitFlagsDate = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit;
NSDateComponents *dateComponents = [gregorian components:unitFlagsDate fromDate:date1];
unsigned unitFlagsTime = NSHourCalendarUnit | NSMinuteCalendarUnit ;
NSDateComponents *timeComponents = [gregorian components:unitFlagsTime fromDate:date2];

[dateComponents setHour:[timeComponents hour]];
[dateComponents setMinute:[timeComponents minute]];

NSDate *combDate = [gregorian dateFromComponents:dateComponents];   

UILocalNotification *localNotif = [[UILocalNotification alloc] init];
if (localNotif == nil) return;
NSDate *fireTime = combDate;
localNotif.fireDate = fireTime;
localNotif.alertBody = @"Alert!";
localNotif.soundName = UILocalNotificationDefaultSoundName;  
[[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
@ rdelmar: я перепроверил свои iboutlets. они в порядке.. Midas
Попробуйте зарегистрировать дату1 и дату2, чтобы увидеть, что они возвращают (я получил 2001-01-01 за дату, когда мой сборщик дат не был 'правильно подключен). rdelmar
@CRDave добавил мой код .. Midas
@CRDave Я думаю, что вы прочитали это неправильно, его не сравнивая, его объединение даты и времени .. Midas

Ваш Ответ

2   ответа
21
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *dateComponents = [calendar components:NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit fromDate:self.datePicker.date];
NSDateComponents *timeComponents = [calendar components:NSHourCalendarUnit|NSMinuteCalendarUnit fromDate:self.timePicker.date];

NSDateComponents *newComponents = [[NSDateComponents alloc]init];
newComponents.timeZone = [NSTimeZone systemTimeZone];
[newComponents setDay:[dateComponents day]];
[newComponents setMonth:[dateComponents month]];
[newComponents setYear:[dateComponents year]];
[newComponents setHour:[timeComponents hour]];
[newComponents setMinute:[timeComponents minute]];

NSDate *combDate = [calendar dateFromComponents:newComponents]; 

NSLog(@" \ndate : %@ \ntime : %@\ncomDate : %@",self.datePicker.date,self.timePicker.date,combDate);
УСТАРЕЛО - 8.0 NSCalendarUnitYear, NSCalendarUnitMonth, NSCalendarUnitDay NSCalendarUnitHour, NSCalendarUnitMinute, NSCalendarUnitSecond Alex Hedley
1

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

Конвертировать дату в NSString и время в NSString.

Apppend Time в строку даты.

Теперь преобразуйте эту последнюю строку в NSDate

Пример: (Добавить проверки со своей стороны)

 NSDate *date1 = [datePicker date];
    NSDate *date2 = [timePicker date];

    NSString *date = [NSString stringWithFormat:@"%@",date1];
    NSString *time = [NSString stringWithFormat:@"%@",date2];

    NSString *dateAndTime = [NSString stringWithFormat:@"%@ %@",date,time];
    NSDate *dateTime = [self dateFromString:dateAndTime];



- (NSDate*) dateFromString:(NSString*)aStr
{


    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]];
    //[dateFormatter setDateFormat:@"YYYY-MM-dd HH:mm:ss a"];
    [dateFormatter setDateFormat:@"MM/dd/yyyy HH:mm:ss a"];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

    NSLog(@"%@", aStr);
    NSDate   *aDate = [dateFormatter dateFromString:aStr];
    [dateFormatter release];
    return aDate;
}
не работает для меня ... Midas
после долгих усилий у меня отлично работает вышеприведенная логика codeIgnitor

Похожие вопросы