在两个NSDate之间获得准确的时间差?

Jos*_*ane 10 cocoa-touch objective-c nsdate ios

有没有办法找出两者之间的准确差异NSDate

我找到了解决方案,但它们不够准确.我需要考虑夏令时,不同月份的天数不同等等.

一个简单的计算,如/ 60/60/24等,可以计算出分钟,小时和天数,但不考虑它们.

让我们说我需要弄清楚现在([NSDate date])和12月25日晚上10点22分(用户使用日期选择器选择的日期[datePicker date])之间的差异,作为一个例子,我该怎么做?
知道确切的时差并不是关键,只要我有几天,几个月和几年的准确差异就可以了.

Dar*_*man 25

来自Apple的日期和时间编程指南:

清单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];
Run Code Online (Sandbox Code Playgroud)


San*_*hry 15

NSDate完全独立于时区.NSDate甚至没有采用夏令时.只有当您将NSDate转换为人类可读格式(MM/DD/YY,HH:MM:SS格式等)时,时区才能进入画面.

创建 NSDate 时,请确保考虑正确的时区,日光保存设置.随后,该方法,[date1 timeIntervalSinceDate:date2]应始终给你准确的时差.