有没有办法精确地找出两个NSDate
的差异?
我已经找到了一些解决方案,但它们并不够准确。我需要考虑到夏令时、不同月份的天数不同等因素。
简单的计算,比如/60/60/24等来计算分钟、小时和天数,都没有考虑这些因素。
假设我需要计算现在的时间([NSDate date]
)与12月25日10:22PM(用户使用日期选择器[datePicker date]
选择的日期)之间的差异,这只是一个例子,我该怎么做呢?
知道准确的时间差不是关键,只要我有准确的天、月和年的差异就可以了。
有没有办法精确地找出两个NSDate
的差异?
我已经找到了一些解决方案,但它们并不够准确。我需要考虑到夏令时、不同月份的天数不同等因素。
简单的计算,比如/60/60/24等来计算分钟、小时和天数,都没有考虑这些因素。
假设我需要计算现在的时间([NSDate date]
)与12月25日10:22PM(用户使用日期选择器[datePicker date]
选择的日期)之间的差异,这只是一个例子,我该怎么做呢?
知道准确的时间差不是关键,只要我有准确的天、月和年的差异就可以了。
以下内容摘自苹果公司的日期和时间编程指南:
代码清单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 timeIntervalSinceDate:date2]
方法应始终为您提供准确的时间差异。
关于最新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];