dateByAddingComponents并与NSDATECOMPONTENTS获得差异
-
22-09-2019 - |
题
我在将值添加值添加值以及在日期之间差异时遇到问题。计算的日期和组件是不正确的。
因此,为了添加,如果我添加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 NSDateComponents
花 NSInteger
, ,不是浮点号。因此,行为是正确的,因为它只是将1.5比1截断。
现在有所不同,如果我的日期已添加了一年(几乎与上面的代码几乎相同),则它可以正确添加,但是当计算差异时,我会得到0年,11个月零30天。
除非您显示如何创建date1和date2变量的代码,否则没有真正的分辨方法。
(您也在上面泄漏内存;始终将Alloc与 release
/autorelease
. 。并尽量不要给您的变量大写字母,因为作为样式,这只能为班级名称做)
其他提示
我终于发现了日期差异的问题,当我将其保存到DB时,我使用了带有双重值的TimeIntervals1970,但是当填充它并将其设置为datePicker时,我使用的是INT列类型。
感谢Shaggy Frog指导我朝正确的方向转向。
不隶属于 StackOverflow