HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 获取单个NSDateComponent的2个日期之间的确切差异大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
如何获得NSDate的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
@H_197_33@

大佬总结

以上是大佬教程为你收集整理的ios – 获取单个NSDateComponent的2个日期之间的确切差异全部内容,希望文章能够帮你解决ios – 获取单个NSDateComponent的2个日期之间的确切差异所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。