我正在创建一个使用两个UIDatePickers的iOS应用程序。它们只显示小时和分钟(我的应用程序仍使用月,日和年)。在main.storyboard中,我将UIDatePickers的日期值设置为当前日期。并且,我将他们的间隔设置为15分钟。
问题是,如果我不滚动UIDatePickers,我从它们获得的日期值不是15分钟。如果我滚动它们,我会间隔15分钟。
实施例: 实际时间是下午8:47。 UIDatePicker加载到晚上8:45。我从中得到的日期值没有滚动将是晚上8:47,而不是晚上8:45。如果我向上滚动到晚上8:30或晚上9:00,我会得到那些时间。
我想以15分钟的间隔来节省时间。有没有办法做到这一点,还是我必须写一个函数来舍入到最近的15分钟间隔?
答案 0 :(得分:5)
实际上,事实证明有人在Swift 3中为此写了一个扩展名。我的错误。这个解决方案非常适合我。
答案 1 :(得分:0)
您必须在viewDidLoad中调用的函数中理想地设置datePicker的日期。
// Do your date computation here to get nearestFifteenMinuteInterval
self.yourDatePicker.date = nearestFifteenMinuteInterval
对于计算,使用Date的timeInterval方法/计算属性,使用秒数。
例如,timeIntervalSince1970是自1970年1月1日0:00:00以来经过的秒数。
此外,您可以使用以下日期作为参考日期:
let START_OF_DAY: Date = {
let calendar: Calendar = Calendar(identifier: Calendar.Identifier.gregorian)
return calendar.startOfDay(for: Date())
}()
答案 2 :(得分:0)
我遇到了这个问题并成功实现了解决此问题的方法:
- (NSDate *)roundToNearestQuarterHour:(NSDate *)date{
NSCalendar *calendar = [NSCalendar currentCalendar];
unsigned unitFlags = NSCalendarUnitYear| NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitWeekday | NSCalendarUnitWeekdayOrdinal | NSCalendarUnitWeekOfYear;
NSDateComponents *components = [calendar components:unitFlags fromDate:date];
NSInteger roundedToQuarterHour = round((components.minute/15.0)) * 15;
components.minute = roundedToQuarterHour;
return [calendar dateFromComponents:components];
}
所以你这样打电话:
NSDate *now = [self roundToNearestQuarterHour:[NSDate date]];
不幸的是,我来自Objective C背景,对Swift缺乏经验。