2012-04-17 6 views
1

iPhoneの目覚まし時計のようなピッカー表示があります(最初のコンポーネント= 1-12、2番目のコンポーネント= 0-60、3番目のコンポーネント= am/pm)。私がしているのは、ピッカービューのdidSelect代理人です。UIPickerViewからNSDateを取得する

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年代の時間であることに気付きました。だから私は、これが通知を設定する将来的になるように、ピッカーの視点から時間を得るのが「標準的な」方法であるかどうかはわかりませんでした。ありがとう!この時

答えて

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]; 


} 

はそれが役に立てば幸い!

関連する問題