我从服务器获得一个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时间设置也不应该有几乎相同的时间。
任何人都可以帮助我如何获得这个简单的时差。我哪里错了?我在这个问题上搜索了很多,但无法得到预期的结果。
非常感谢任何帮助。
由于
答案 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);