IOS从现在开始计算时差

时间:2014-06-21 09:40:01

标签: ios objective-c datetime time

我从服务器获得一个Unix时间戳(在时间创建),我使用它来获取NSDate对象:

NSTimeInterval interval = [str doubleValue];    
NSDate *timeStamp = [NSDate dateWithTimeIntervalSince1970:interval];

我需要找到上面创建的时间和当前时间之间的时差,并以hh:mm:ss格式显示。我把它编码了: -

    NSTimeInterval timeDiff = [agent.chatStartTimeStamp timeIntervalSinceNow];
    // NSDate *now = [NSDate date];
    // timeDiff = [now timeIntervalSinceDate:agent.chatStartTimeStamp];  // RETURNS NEGATIVE

    // Divide the interval by 3600 and keep the quotient and remainder
    div_t h = div(timeDiff, 3600);
    int hours = h.quot;
    // Divide the remainder by 60; the quotient is minutes, the remainder
    // is seconds.
    div_t m = div(h.rem, 60);
    int minutes = m.quot;
    int seconds = m.rem;

    NSString *str = [NSString stringWithFormat:@"%d:%d%d", hours, minutes, seconds];
    cell.timeLabel.text = str;

    NSLog(@"*********** CV CTRL - AGENT CHATSTARTTIME - %@  TIME DIFFERNCE = %f  STR = %@", agent.chatStartTimeStamp, timeDiff, str);

以上2个代码的日志 -

AGENT CHATSTART TIME - 1403342129.980000  SET TIME - 2014-06-21 09:15:29 +0000

*********** CV CTRL - AGENT CHATSTARTTIME - 2014-06-21 09:15:29 +0000  TIME DIFFERNCE = 130.419857  STR = 0:210

上面的代码给出了结果 - 假设值为0:2:10,则此值减小为0:1:40,0:1:6,0:-1 ....

我正在寻找的是 - 时间差应该增加,因为在时间创建时将只是当前时间之前/之前的时间。所以我希望从现在开始减去startTime的值,即now - startTime(time)。而且我相信这会给我带来正如我期待的结果。我尝试使用[now timeIntervalSinceDate:agent.chatStartTimeStamp];,但会返回否定回复。

更新

这是我将unix时间戳转换为loca时间的方法: -

+ (NSDate *)getNSDateFromUnixTimeStamp : (NSString *) unixTime {
NSString *str = [NSString stringWithFormat:@"%f",[unixTime doubleValue]/(double)1000];

NSTimeInterval interval = [str doubleValue];

NSDate *timeStamp = [NSDate dateWithTimeIntervalSince1970:interval];

str = nil;
unixTime = nil;

return timeStamp;

}

并记录相同的内容: -

2014-06-23 12:24:38.046 MintChat[1021:70b] AGENT CHATSTART TIME - 1403506610.771000  SET TIME - 2014-06-23 06:56:50 +0000

我的系统时间是12:24:38& unixtimestamp也是之前几秒的当前时间,所以我想unix时间设置也不应该有几乎相同的时间。

任何人都可以帮助我如何获得这个简单的时差。我哪里错了?我在这个问题上搜索了很多,但无法得到预期的结果。

非常感谢任何帮助。

由于

1 个答案:

答案 0 :(得分:1)

您的评论代码[now timeIntervalSinceDate:agent.chatStartTimeStamp];是正确的。来自NSDate文档 -

  

返回值

     

接收器与当前日期和时间之间的间隔。如果接收者早于当前日期和   时间,返回值为负。

所以,你可以简单地取绝对值来得到秒数 -

NSTimeInterval timeDiff = fabs([now timeIntervalSinceDate:agent.chatStartTimeStamp]);

获得时间间隔后,您可以使用this answer对其进行格式化 -

NSDate *date = [NSDate dateWithTimeIntervalSince1970:timeDiff];    
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"HH:mm:ss"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
NSString *formattedDate = [dateFormatter stringFromDate:date];
NSLog(@"hh:mm:ss %@", formattedDate);