我做了一个快速游乐场here来展示NSCalendar的rangeOfUnit func中的错误。
在一些初始陈述后,您可以看到我的输出
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
并且对结果值922337203685477580感到困惑。任何人都对此有解释?
答案 0 :(得分: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!)
9223372036854775807
10 == 111111111111111111111111111111111111111111111111111111111111111
2
此数字是64位中最高的Int值
还NSNotFound = NSIntegerMax
func rangeOfUnit(_: inUnit:forDate:) -> NSRange
docs说明
[...]返回{NSNotFound,NSNotFound}如果在日历中逻辑上大于较小值,或者给定的单位组合没有意义[...]