我使用以下命令计算两个日期之间的月份差:
NSInteger month = [[[NSCalendar currentCalendar] components: NSMonthCalendarUnit fromDate: start toDate: end options: 0] month];当它计算月份时,我遇到了一个小问题。让我们假设:
开始日期= 01/05/2005;(dd/mm/yyyy)结束日期= 01/06/2005;(dd/mm/yyyy)
月差值返回为0。我注意到,为了返回正确的结果(在本例中为1),我需要将结束日期设置为开始日期的+1天。所以,2/06/2005。我该怎么解决这个问题呢?
发布于 2011-04-07 02:43:29
尝试将timeZone设置为UTC。
下面的示例代码为差值返回1。
NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setDateFormat:@"dd/MM/yyyy"];
[formatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
NSDate * start = [formatter dateFromString:@"01/05/2005"];
NSDate * end = [formatter dateFromString:@"01/06/2005"];
NSInteger month = [[[NSCalendar currentCalendar] components: NSMonthCalendarUnit fromDate: start toDate: end options: 0] month];
NSLog(@"%@, %@ --> difference: %d", start, end, month);发布于 2011-04-07 02:31:56
但差异是0个月,因为是同一个月。如果您更喜欢将同一个月表示为1,而将“下一个”月表示为2,您可以简单地将结果加1吗?
发布于 2011-04-07 02:34:02
在我看来,您的输入被误解了。如何创建start和end对象?您是否验证了您的输入数据被解释为您想要的dd/mm/yyyy,而不是mm/dd/yyyy?
如果第一个分量('01‘表示开始和结束)被解释为月份而不是日期,则0的差值将是完全正确的。此外,如果是这样的话,在结束日期中使用'02‘将(再次正确地)表现为您所描述的方式。
https://stackoverflow.com/questions/5571192
复制相似问题