从UIPickerView获取NSDate

时间:2012-04-17 04:31:30

标签: iphone nsdate uipickerview

我有一个类似于iphone上的闹钟应用程序的选择器视图(第一个组件= 1-12,第二个组件= 0-60,第三个组件=上午/下午)。我在选择器视图的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年代。因此,我不确定这是否是“标准”方式,以便从选择器视图中获取时间,以便将来设置通知。谢谢!

1 个答案:

答案 0 :(得分: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];


}

希望它有所帮助!!