两个 NSDate 对象之间的区别——结果也是一个 NSDate

问题描述 投票:0回答:5

我有两个 NSDate 对象,我想要两者之间的区别,结果应该还是一个 NSDate 对象。知道如何实现这一目标吗?

在这里,我试图解决一个独特的问题,我必须找出经过的时间,然后定位经过的时间。如果我在 NSDate 对象中有经过的时间,我可以对其进行本地化。所以想创建一个 NSDate 对象,它的时间分量与两个日期之间的时间间隔相同,这样我就可以使用 NSDateFormatter 来本地化它。

iphone objective-c cocoa-touch ios nsdate
5个回答
152
投票

NSDate
表示时间实例,因此将 interval 时间表示为
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);

18
投票

如果从 05/05/2002 中减去 12/12/2001 会是哪一天?两个日期之间的时间间隔不可能是日期,它总是某种间隔。您可以使用 timeIntervalSinceDate: 来计算时间间隔。

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


7
投票

NSDate
类参考,你有实例方法来做这些-

  1. 如何比较两个 NSDate 变量? 答案:
    isEqualToDate:
  2. 如何找到两个 NSDate 变量之间的差异? 答案:
    timeIntervalSinceDate:

4
投票

您可以使用

NSDate
timeIntervalSinceDate:
计算两个日期之间的时间间隔,但是将时间间隔表示为日期对您来说没有任何意义。


3
投票

在 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");
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.