首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS: NSDate和NSDateComponent的问题

iOS: NSDate和NSDateComponent的问题
EN

Stack Overflow用户
提问于 2011-05-12 17:00:30
回答 2查看 642关注 0票数 1
代码语言:javascript
复制
NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
[components setTimeZone:[ NSTimeZone timeZoneForSecondsFromGMT:(+0*3600) ] ] ;
[components setYear:2011];
[components setDay:13];
[components setMonth:5];
NSDate *date1 = [gregorianCalendar dateFromComponents:components];
NSDate *date2 = [[NSDate alloc] init];


    NSTimeInterval diff = [data2 timeIntervalSinceDate:date1];
    NSString *intervalString = [NSString stringWithFormat:@"%f", diff];
    int second = [intervalString intValue];
    int period = second/3600/24; 
    NSLog(@"period:%d", period);
    NSLog(@"date1:%@", data1);
    NSLog(@"date2:%@", data2);

在consol中,结果是:

2011-05-12 10:57:00.406项目297:707期:0;

2011-05-12 10:57:00.375项目297:707data2:2011-05-12 08:56:52 +0000

2011-05-12 10:57:00.402项目297:707data1:2011-05-13 00:00:00 +0000

我不明白为什么句点是"0",一定是“1”,你能帮我吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-12 17:19:06

NSTimeInterval只是一个双精度型,所以你不需要先把它转换成一个字符串,然后再转换回一个整型。

如果你这样做会发生什么:

代码语言:javascript
复制
NSTimeInterval diff = [data2 timeIntervalSinceDate:date1];
int period = (int)diff/3600/24; 
NSLog(@"period:%d", period);

另外,如果interval is diff小于3600*24,则diff/3600/24的结果将小于1,因此int值将被展平为0。

票数 0
EN

Stack Overflow用户

发布于 2011-05-12 17:21:56

date2是当前日期。不知道为什么period应该是这里的一个。

在撰写本文时,diff大约是。-53000。除以它会使它变为零,这是您所期望的结果。

还要记住,NSTimeInterval是一个浮点数,您通过字符串将其转换为整数,这将丢弃小数。

通过字符串进行这种转换是没有意义的--只需使用int seconds = (int) diff;即可。

请直接复制/粘贴您的代码,因为您引用的是data1data2,但是您的变量名为date1date2。但是,如果这些变量是在其他地方声明的,那么这可能已经是您的bug。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5975658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档