Ios 获取两个NSDate之间的准确时差?

Ios 获取两个NSDate之间的准确时差?,ios,objective-c,cocoa-touch,nsdate,Ios,Objective C,Cocoa Touch,Nsdate,有没有办法找出两个日期之间的准确差异 我已经找到了解决方案,但还不够准确。我需要考虑夏时制,不同的月份有不同的天数,等等 一个简单的计算,如/60/60/24等,计算出分钟、小时和天,并不考虑它们 假设我需要计算出当前时间([NSDate date])和12月25日10:22PM(由用户使用日期选择器选择的日期)之间的差异,作为一个示例,我该如何做? 知道准确的时差并不是关键,只要我有一个精确的日、月、年的时差,就可以了。来自苹果: 清单12获取两个日期之间的差异 NSDate *startDa

有没有办法找出两个日期之间的准确差异

我已经找到了解决方案,但还不够准确。我需要考虑夏时制,不同的月份有不同的天数,等等

一个简单的计算,如/60/60/24等,计算出分钟、小时和天,并不考虑它们

假设我需要计算出当前时间(
[NSDate date]
)和12月25日10:22PM(由用户使用日期选择器选择的日期)之间的差异,作为一个示例,我该如何做?
知道准确的时差并不是关键,只要我有一个精确的日、月、年的时差,就可以了。

来自苹果:

清单12获取两个日期之间的差异

NSDate *startDate = ...;
NSDate *endDate = ...;

NSCalendar *gregorian = [[NSCalendar alloc]
                 initWithCalendarIdentifier:NSGregorianCalendar];

NSUInteger unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit;

NSDateComponents *components = [gregorian components:unitFlags
                                          fromDate:startDate
                                          toDate:endDate options:0];
NSInteger months = [components month];
NSInteger days = [components day];

NSDate完全独立于时区。夏时制甚至没有出现在NSDate的画面中。只有将NSDate转换为人类可读的格式(MM/DD/YY、HH:MM:SS格式或类似格式)时,时区才会出现


确保在创建NSDate时考虑了正确的时区、日间节能设置。随后,方法,
[date1 TimeIntervalsCenceDate:date2]
应始终为您提供准确的时差。

因此,您想问的更准确的问题是:如何从两个日期之间的差异中获得格式良好的日、月、年。首先要获取nsTimerInterval(以秒为单位的时差),然后对其进行格式化:


最新iOS代码的小更新:

NSDate *startDate = ...;
NSDate *endDate = ...;

NSCalendar *gregorian = [[NSCalendar alloc]
                             initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

NSUInteger unitFlags = NSCalendarUnitMonth | NSCalendarUnitDay;

NSDateComponents *components = [gregorian components:unitFlags
                                            fromDate: startDate
                                              toDate:endDate options:0];
NSInteger months = [components month];
NSInteger days = [components day];

可能的双重历法计算是困难的。聪明人经常犯错。最大的陷阱是相信它很简单。慢慢来,期待一路上会犯错误。需要注意的是,Cocoa提供了很好的工具来正确地完成任务,但似乎不容易做到我所说的工具。第一步是阅读并重读文档,然后猜测您的理解。需要对它们有一个清晰的理解,才能充分定义您的实际问题和解决方案。这可能会让人沮丧,但他们实际上提供了一些工具,迫使你正确地做这件事(经过一段时间的努力)。这种方法的问题是,我得到了两个日期之间的准确秒数,但随后将其分为几天,月份和年份是不准确的,因为它太复杂,无法考虑该月份或年份中的天数,请更改分隔符。明白吗?这就是为什么我回避这个问题。桑杰·乔杜里的回答回答了你的问题。我猜你问的问题不够精确。