NSCalendar的calendar.rangeOfUnit func中的错误?

时间:2016-01-10 02:48:33

标签: swift nsdate nscalendar

我做了一个快速游乐场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感到困惑。任何人都对此有解释?

1 个答案:

答案 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}如果在日历中逻辑上大于较小值,或者给定的单位组合没有意义[...]