【问题标题】:UIDatePicker is set to 15 minute intervals, but the date if the user doesn't scroll isn't in 15 minute intervalsUIDatePicker 设置为 15 分钟间隔,但用户不滚动的日期不是 15 分钟间隔
【发布时间】:2017-03-08 02:51:30
【问题描述】:
我正在创建一个使用两个 UIDatePicker 的 iOS 应用程序。它们只显示小时和分钟(尽管我的应用程序仍然使用月、日和年)。在 main.storyboard 中,我将 UIDatePickers 的日期值设置为当前日期。而且,我已将它们的间隔设置为 15 分钟。
问题是,如果我不滚动 UIDatePickers,我从它们那里得到的日期值不是 15 分钟的间隔。如果我滚动它们,我会得到 15 分钟的间隔。
示例:
实际时间是晚上 8 点 47 分。 UIDatePicker 加载到晚上 8:45。我在不滚动的情况下从中获得的日期值将是晚上 8 点 47 分,而不是晚上 8 点 45 分。如果我滚动到晚上 8:30 或晚上 9:00,我会得到这些时间。
我想以 15 分钟为间隔获取我的时间。有没有办法做到这一点,还是我必须编写一个函数来四舍五入到最近的 15 分钟间隔?
【问题讨论】:
标签:
ios
swift
date
uidatepicker
【解决方案2】:
我遇到了这个问题,并成功实现了解决这个问题的方法:
- (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 缺乏经验。
【解决方案3】:
您必须在 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())
}()