NSCalendar 的 calendar.rangeOfUnit 函数中存在错误?
Bug in NSCalendar's calendar.rangeOfUnit func?
我做了一个快速游乐场 here 来展示 NSCalendar 的 rangeOfUnit 函数中的一个错误。
经过一些初始陈述后,您可以看到我对
的输出
let secs = calendar.rangeOfUnit(.Second, inUnit: .Month, forDate: firstOfMonth!).length
是 60。我期待看到 2678400(60 秒 * 60 分钟 * 24 小时 * 31 天)。我做错了什么吗?
我还想我会用几乎微不足道的东西强调 func
let months = calendar.rangeOfUnit(.Month, inUnit: .Month, forDate: firstOfMonth!).length
并对结果值 9223372036854775807 感到困惑。有人对此有解释吗?
我认为您正在寻找 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
这个数字是64bit中最高的Int值。
还有 NSNotFound = NSIntegerMax
func rangeOfUnit(_: inUnit:forDate:) -> NSRange
文档状态
[…] Returns {NSNotFound, NSNotFound} if larger is not logically bigger than smaller in the calendar, or the given combination of units does not make sense […]
我做了一个快速游乐场 here 来展示 NSCalendar 的 rangeOfUnit 函数中的一个错误。
经过一些初始陈述后,您可以看到我对
的输出let secs = calendar.rangeOfUnit(.Second, inUnit: .Month, forDate: firstOfMonth!).length
是 60。我期待看到 2678400(60 秒 * 60 分钟 * 24 小时 * 31 天)。我做错了什么吗?
我还想我会用几乎微不足道的东西强调 func
let months = calendar.rangeOfUnit(.Month, inUnit: .Month, forDate: firstOfMonth!).length
并对结果值 9223372036854775807 感到困惑。有人对此有解释吗?
我认为您正在寻找 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
这个数字是64bit中最高的Int值。
还有 NSNotFound = NSIntegerMax
func rangeOfUnit(_: inUnit:forDate:) -> NSRange
文档状态
[…] Returns {NSNotFound, NSNotFound} if larger is not logically bigger than smaller in the calendar, or the given combination of units does not make sense […]