两个NSDate对象相减

25

可能重复:
如何在iPhone中获取时间差异

我从JSON源获取日期和时间。 我需要找到从源获取的日期与今天日期和时间之间的差异。 有什么建议吗?

我知道我需要用源日期减去当前日期,但我不知道如何做。

例如:

来自源的日期:日期:2011-06-10 15:00:00 +0000 今天:日期:2011-06-10 14:50:00 +0000

我需要显示差异是十分钟。

谢谢!


你应该查看https://dev59.com/mUnSa4cB1Zd3GeqPNFzb。 - Konstantin Chugalinskiy
3个回答

56

使用NSDate的 -dateWithString: 方法从这两个字符串创建两个NSDate对象,然后获取这两个NSDate对象之间的时间差。

NSTimeInterval diff = [date2 timeIntervalSinceDate:date1];

4

在尝试比较之前,您需要将输入日期转换为NSDate对象。

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss +0000"];
NSDate *startDate = [dateFormatter dateFromString:yourJSONDateString];
NSDate *endDate = [NSDate date];

CGFloat minuteDifference = [endDate timeIntervalSinceDate:startDate] / 60.0;

格式化程序假定UTC偏移量始终为零。如果不是这样,请参见Microsoft的日期格式字符串页面以获取其他可以使用的格式代码。

--

编辑:大家都用的dateWithString方法在你的情况下会更好,但如果你得到的日期格式字符串不完全正确,则需要使用日期格式化程序。我认为我从来没有使用过以正确格式发送日期的API,也许我只是不太幸运 :-(。

CGFloat 不是指针。 - AAV
这就是我在提交前没有在Xcode中编写答案的结果。 - kubi

0

从下面的代码你可以了解如何比较两个NSDate对象。

NSDate *dateOne = [NSDate dateWithString:@"2011-06-10 15:00:00 +0000"];
NSDate *dateTwo = [NSDate dateWithString:@"2011-06-10 14:50:00 +0000"];

switch ([dateOne compare:dateTwo])
{
    case NSOrderedAscending:
         NSLog(@”NSOrderedAscending”);
         break;
    case NSOrderedSame:
        NSLog(@”NSOrderedSame”);
        break;
    case NSOrderedDescending:
       NSLog(@”NSOrderedDescending”);
       break;
}

请查看这个 Stack Overflow 帖子:https://dev59.com/uW035IYBdhLWcg3wMNGW - Jhaliya - Praveen Sharma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接