我在将值添加值添加值以及在日期之间差异时遇到问题。计算的日期和组件是不正确的。

因此,为了添加,如果我添加1.5个月,我只会得到1个月,但是,如果我添加任何整数,即(1或2或3等),则可以正确计算。

Float32 addAmount = 1.5;

NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
[components setMonth:addAmount];

NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
 [gregorian setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];

 NSDate *newDate2 = [gregorian dateByAddingComponents:components toDate:Date1 options:0];

现在有所不同,如果我的日期已添加了一年(几乎与上面的代码几乎相同),则它可以正确添加,但是当计算差异时,我会得到0年,11个月零30天。

NSDate *startDate = Date1;
NSDate *endDate = Date2;

NSCalendar *gregorian = [[NSCalendar alloc]
          initWithCalendarIdentifier:NSGregorianCalendar];
[gregorian setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];

NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;

NSDateComponents *components = [gregorian components:unitFlags
              fromDate:startDate
                toDate:endDate options:0];

NSInteger years = [components year];
NSInteger months = [components month];
NSInteger days = [components day];

我究竟做错了什么?另外,我在添加和差异函数的选项中添加了KCFCALENDARCOMPONENTSWRAP CONSANCT,但没有差异。

谢谢

有帮助吗?

解决方案

因此,为了添加,如果我添加1.5个月,我只会得到1个月,但是,如果我添加任何整数,即(1或2或3等),则可以正确计算。

setMonth: 方法IN NSDateComponentsNSInteger, ,不是浮点号。因此,行为是正确的,因为它只是将1.5比1截断。

现在有所不同,如果我的日期已添加了一年(几乎与上面的代码几乎相同),则它可以正确添加,但是当计算差异时,我会得到0年,11个月零30天。

除非您显示如何创建date1和date2变量的代码,否则没有真正的分辨方法。

(您也在上面泄漏内存;始终将Alloc与 release/autorelease. 。并尽量不要给您的变量大写字母,因为作为样式,这只能为班级名称做)

其他提示

我终于发现了日期差异的问题,当我将其保存到DB时,我使用了带有双重值的TimeIntervals1970,但是当填充它并将其设置为datePicker时,我使用的是INT列类型。

感谢Shaggy Frog指导我朝正确的方向转向。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top