我的选择设置:
问题:
提议:
1.
1. when get the picker value without any scroll, the return value should be initial value of picker. That is, if the picker starts from 6:30 means then the picker return value be 6:30.
发布于 2014-12-22 14:42:16
这是最接近30分钟的公式。
int remainder = currentMinute % 30;
int rounded = currentMinute + 30-remainder;
// if current minute is 17
// remainder = 17 % 30 == 17
// rounded = 17 + 30-17 == 30
// if current minute is 56
// remainder = 56 % 30 == 26
// rounded = 56+30-26== 60编辑:将模运算符从\更正为%
EDIT2:对不起,我之前发布的公式是不正确的。这应该是正确的答案
编辑3:完整代码
- (NSDate *)roundUpToNearestHalfHour:(NSDate *)value {
    NSDateComponents *comp = [[NSCalendar currentCalendar] components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitCalendar fromDate:value];
    NSInteger minute = [comp minute];
    int remainder = minute % 30;
    int rounded = minute + 30 - remainder;
    [comp setMinute:rounded];
    return [comp date];
}发布于 2016-04-16 22:02:43
我就这样解决了
 - (void)viewDidLoad {
    [super viewDidLoad];
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)];
    tapGesture.cancelsTouchesInView = NO;
    [self.view addGestureRecognizer:tapGesture];
    DoneCancelNumberPadToolbar *toolbar = [[DoneCancelNumberPadToolbar alloc] initWithTextField:self.startTime];
    toolbar.delegateLocal = self;
    self.startTime.inputAccessoryView = toolbar;
    self.endTime.inputAccessoryView = toolbar;
    self.pickerStartTime = [[UIDatePicker alloc] init];
    self.pickerStartTime.datePickerMode = UIDatePickerModeTime;
    [self.pickerStartTime setLocale:[NSLocale localeWithLocaleIdentifier:@"pt_BR"]];
    [self.pickerStartTime setMinuteInterval:30];
    [self.pickerStartTime addTarget:self action:@selector(dateStartIsChanged) forControlEvents:UIControlEventValueChanged];
    self.startTime.inputView = self.pickerStartTime;
}
- (void) dateStartIsChanged {
    NSDateComponents *comp = [[NSCalendar currentCalendar] components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitCalendar fromDate:self.pickerStartTime.date];
    NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];
    [outputFormatter setDateFormat:@"H:mm"];
    self.startTime.text = [outputFormatter stringFromDate:[comp date]];
}
发布于 2019-07-29 15:34:43
对于那些寻找类似@Tien的答案,但在Swift (斯威夫特4)。
func roundUpToNearestQuarterHour(date: Date) -> Date{
    var comp = Calendar.current.dateComponents(in: TimeZone.current, from: date)
    let minute = comp.minute
    let remainder = minute % 30;
    let rounded = minute + 30 - remainder;
    comp.setValue(rounded, for: .minute)
    return comp.date
}https://stackoverflow.com/questions/27604035
复制相似问题