【问题标题】: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


【解决方案1】:

实际上,有人在 Swift 3 中为此编写了一个扩展。我的错误。这个解决方案非常适合我。

https://stackoverflow.com/a/42263214/7025448

【讨论】:

  • 谢谢我也在找同样的东西:)
【解决方案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())
    }()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-31
      • 2012-11-18
      • 1970-01-01
      • 2016-11-24
      • 1970-01-01
      • 2020-12-15
      相关资源
      最近更新 更多