1

我有一个类似于 iphone 上的闹钟应用程序的选择器视图(第一个组件 = 1-12,第二个组件 = 0-60,第三个组件 = am/pm)。我所做的是在选择器视图的 didSelect 委托中。

if (component == PICKER_HOURS) {
        rowSelected = [self.hour objectAtIndex:row % 12];
        self.hourSelected = rowSelected;
    }
    else if (component == PICKER_MINUTES) {
        rowSelected = [self.minutes objectAtIndex:row % 60];
        self.minuteSelected = rowSelected;
    }
    else {
        rowSelected = [self.ampm objectAtIndex:row];
        self.ampmSelected = rowSelected;
    }
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
    dateFormatter.dateFormat = @"h:mm a";

    NSString *timeString = [NSString stringWithFormat:@"%@:%@ %@", _hourSelected, _minuteSelected, _ampmSelected];
    NSString *trimmedTimeString = [timeString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

    NSDate *dateSelected = [dateFormatter dateFromString:timeString];

    NSDate *dateForAlarm = [self alarmDateForDate:dateSelected];


------


- (NSDate *)alarmDateForDate:(NSDate *)dateSelected {
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *dateComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit)
                                                   fromDate:[NSDate date]];     // set the date to the current date
    NSDateComponents *timeComponents = [calendar components:(NSHourCalendarUnit | NSMinuteCalendarUnit) fromDate:dateSelected];     // set the time to what's in the picker

    NSDateComponents *dateComps = [[NSDateComponents alloc] init];
    [dateComps setDay:[dateComponents day]];
    [dateComps setYear:[dateComponents year]];
    [dateComps setMonth:[dateComponents month]];
    [dateComps setHour:[timeComponents hour]];
    [dateComps setMinute:[timeComponents minute]];

    NSDate *dateForAlarm = [calendar dateFromComponents:dateComps];

    return dateForAlarm;
}

这是正确的方法吗?我意识到我在选择器视图中的 dateFromString 始终是 1970 年的时间。所以我不确定这是否是从选择器视图中获取时间的“标准”方式,以便将来设置通知。谢谢!

4

1 回答 1

0

看这个 -

日期选择器 :-

m_pDatePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 40, 50, 50)];
    m_pDatePicker.datePickerMode = UIDatePickerModeDate;
    NSDate *minDate = [NSDate new];
    [m_pDatePicker setMinimumDate:minDate];

    m_pDatePicker.hidden = NO;
    [m_pClientView addSubview:m_pDatePicker];

    [m_pDatePicker addTarget:self action:@selector(pickDateLabel)forControlEvents:UIControlEventValueChanged];

    NSDateComponents* comps = [m_pDatePicker.calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit)
                                                        fromDate:m_pDatePicker.date];
    int myDay = [comps day];
    int myMonth = [comps month];
    int myYear = [comps year];

    pickDateLabel.text=[NSString stringWithFormat:@"%d/%d/%d",myMonth,myDay,myYear];

    dueDateLabel.text=[NSString stringWithFormat:@"%d/%d/%d",myDay,myMonth,myYear];

    [m_pDatePicker release];
    [minDate release];

}

采摘日期 -

- (void)pickDateLabel
{

    NSDateComponents* comps = [m_pDatePicker.calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit)
                                                        fromDate:m_pDatePicker.date];
    int myDay = [comps day];
    int myMonth = [comps month];
    int myYear = [comps year];

    pickDateLabel.text=[NSString stringWithFormat:@"%d/%d/%d",myMonth,myDay,myYear];    

    dueDateLabel.text=[NSString stringWithFormat:@"%d/%d/%d",myDay,myMonth,myYear];


}

希望能帮助到你 !!

于 2012-04-17T04:36:34.253 回答