大佬教程收集整理的这篇文章主要介绍了ios – 获取单个NSDateComponent的2个日期之间的确切差异,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
例如. 2016年1月15日至2017年7月15日= 1.5年.
我可以使用类似的东西:
NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitYear,fromDate:date1,toDate:date1,options:nil).year
但这给了我绝对的价值.即,对于上面的例子,它会给我1年.是否有可能将精确值正确至少几位小数?
假设你想要的精度是2位小数,所以我们需要测量一年到1%.这比一天大,所以追踪天数就足够了.如果你需要更高的精度,那么你可以扩展这种技术,但是如果你把它推得太远,“年”会变得更加棘手,你必须开始问“一年”的意思.
尽可能避免问这个问题.这里的许多答案都说“一年有365.25天”.但是尝试将“365.25 * 24小时”添加到“现在”,看看你是否得到“明年的相同日期和时间”.虽然“平均而言”似乎是正确的,但实际上,日历日期的百分比实际上是错误的. (它在这里工作,因为它在1%以内,但365,366甚至363也是如此.)
我们通过说“1%足够接近这个问题”来避免这种疯狂.
// what calendar do you *really* mean here? The user's current calendar,// or the Gregorian calendar? The below code should work for any calendar,// because every calendar's year is made up of some number of days,but it's // worth considering if you really mean (and are tesTing) arbitrary calendars. // If you mean "Gregorian," then use NSCalendar(identifier: NSCalendarIdentifierGregorian)! let calendar = NSCalendar.currentCalendar() // Determine how many integral days are between the dates let diff = calendar.components(.Day,fromDate: date1,toDate: date2,options: []) // Determine how many days are in a year. If you really meant "Gregorian" above,and // so used calendarWithIdentifer rather than currentCalendar,you can estimate 365 here. // Being within one day is inside the noise floor of 1%. // Yes,this is harder than you'd think. This is based on MarTinR's code: https://stackoverflow.com/a/16812482/97337 var startOfYear: NSDate? = nil var lengthOfYear = NSTimeInterval(0) calendar.rangeOfUnit(.Year,startDate: &startOfYear,interval: &lengthOfYear,forDate: date1) let endOfYear = startOfYear!.dateByAddingTimeInterval(lengthOfYear) let daysInYear = calendar.components(.Day,fromDate: startOfYear!,toDate: endOfYear,options: []).day // Divide let fracDiff = Double(diff.day) / Double(daysInYear)
也就是说,在大多数情况下,你不应该这样做.从iOS 8开始,首选工具是NSDateComponentsFormatter.你不会得到这种精确的格式(即分数年),但你会得到一个很好的本地化结果,可以在不同的文化中考虑大多数问题.
let formatter = NSDateComponentsFormatter() formatter.unitsStyle = .Full formatter.includesApproximationPhrase = true formatter.allowedUnits = [.Year,.Month] formatter.allowsFractionalUnits = true formatter.StringFromDate(date1,toDate: date2) // About 1 year,6 months
以上是大佬教程为你收集整理的ios – 获取单个NSDateComponent的2个日期之间的确切差异全部内容,希望文章能够帮你解决ios – 获取单个NSDateComponent的2个日期之间的确切差异所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。