【问题标题】:Bug in NSCalendar's calendar.rangeOfUnit func?NSCalendar 的 calendar.rangeOfUnit 函数中的错误?
【发布时间】:2016-01-10 02:48:33
【问题描述】:

我创建了一个快速操场here 来展示 NSCalendar 的 rangeOfUnit 函数中似乎存在的错误。

在一些初始语句之后,您可以看到我的输出

let secs = calendar.rangeOfUnit(.Second, inUnit: .Month, forDate: firstOfMonth!).length

是 60。我期待看到 2678400(60 秒 * 60 分钟 * 24 小时 * 31 天)。我做错了吗?

我还以为我会用几乎微不足道的方式来强调功能

let months = calendar.rangeOfUnit(.Month, inUnit: .Month, forDate: firstOfMonth!).length

对结果值 9223372036854775807 感到困惑。有人对此有解释吗?

【问题讨论】:

    标签: swift nsdate nscalendar


    【解决方案1】:

    我认为您正在寻找ordinalityOfUnit() 方法

    首先我们需要月末日期。

    var firstOfMonth:NSDate? = nil
    var seconds: NSTimeInterval = 0
    calendar().rangeOfUnit(.Month, startDate: &firstOfMonth, interval: &seconds, forDate: NSDate())
    let endOfMonth = firstOfMonth?.dateByAddingTimeInterval(seconds-1)
    

    我们做不到

    let secs = calendar().ordinalityOfUnit(.Second, inUnit: .Month, forDate: endOfMonth!)
    

    secs 现在持有2678400

    let min = calendar().ordinalityOfUnit(.Minute, inUnit: .Month, forDate: endOfMonth!)
    let hour= calendar().ordinalityOfUnit(.Hour, inUnit: .Month, forDate: endOfMonth!)
    

    922337203685477580710 == 1111111111111111111111111111111111111111111111111111111111111112
    这个数字是 64 位中最高的 Int 值。
    还有NSNotFound = NSIntegerMax

    func rangeOfUnit(_: inUnit:forDate:) -> NSRange 文档状态

    [...] 如果日历中的大在逻辑上不大于小,则返回 {NSNotFound, NSNotFound},或者给定的单位组合没有意义 [...]

    【讨论】:

    • 谢谢@vikingosegundo。作品! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 2011-12-24
    • 2011-05-18
    相关资源
    最近更新 更多