两个NSDate对象之间的差异 – 结果也是一个NSDate

我有两个NSDate对象,我想两者之间的差异,结果应该再次是一个NSDate对象。 任何想法如何实现这一目标?

在这里,我试图解决一个独特的问题,我必须找出经过的时间,然后本地化经过的时间。 我可以本地化,如果我已经在NSDate对象的时间。 所以想到创build一个NSDate对象,其时间部分与两个date之间的时间间隔相同,以便我可以使用NSDateFormatter来本地化它。

NSDate代表一个实例,因此将一个时间间隔表示为一个NSDate是没有意义的。 你想要的是NSDateComponents

 NSDate *dateA; NSDate *dateB; NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:dateA toDate:dateB options:0]; NSLog(@"Difference in date components: %i/%i/%i", components.day, components.month, components.year); 

如果你从2005年5月5日减去12/12/2001,那么date是多less? 两个date之间的时间距离不能是一个date,总是有某种间隔。 您可以使用timeIntervalSinceDate:来计算时间间隔。

要本地化您可以尝试以下步骤:

  • 你可以使用带有dateFromComponents的NSCalendar:传入一个NSDateComponents 。

  • 打破一个timeInterval到NSDateComponents看看我如何分解NSTimeInterval到iPhone,年,月,日,小时,分钟和秒钟? 。

  • 最后使用NSDateFormatter和initWithDateFormat:allowNaturalLanguage:获取您的本地化string。 date格式string语法显示不同的占位符。

NSDate类的参考,你有实例方法来做到这一点 –

  1. 如何比较两个NSDatevariables? Ans: isEqualToDate:
  2. 如何find两个NSDatevariables之间的区别? Ans: timeIntervalSinceDate:
  3. 如何从NSDatevariables获取分钟,小时和天的单独值? 链接

您可以使用NSDatetimeIntervalSinceDate:来计算两个date之间的时间间隔timeIntervalSinceDate: ,但是将时间间隔表示为date没有任何意义。

在NSDate中使用-compare有一个简单的方法:

 NSDate *dateA = [NSDate dateWithTimeIntervalSinceNow:100]; NSDate *dateB = [NSDate dateWithTimeIntervalSinceNow:200]; NSDate *myDate = [NSDate dateWithTimeIntervalSinceNow:150]; NSArray *dateArray = [NSArray arrayWithObjects:dateA, dateB, myDate, nil]; NSArray *sortedArray = [dateArray sortedArrayUsingSelector:@selector(compare:)]; if ([myDate isEqualToDate:[sortedArray objectAtIndex:1]]) NSLog(@"myDatea between dateA and dateB");