首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NSDate问题

NSDate问题
EN

Stack Overflow用户
提问于 2011-04-07 02:25:57
回答 5查看 184关注 0票数 0

我使用以下命令计算两个日期之间的月份差:

代码语言:javascript
运行
复制
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。我该怎么解决这个问题呢?

EN

回答 5

Stack Overflow用户

发布于 2011-04-07 02:43:29

尝试将timeZone设置为UTC。

下面的示例代码为差值返回1。

代码语言:javascript
运行
复制
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);
票数 1
EN

Stack Overflow用户

发布于 2011-04-07 02:31:56

但差异是0个月,因为是同一个月。如果您更喜欢将同一个月表示为1,而将“下一个”月表示为2,您可以简单地将结果加1吗?

票数 0
EN

Stack Overflow用户

发布于 2011-04-07 02:34:02

在我看来,您的输入被误解了。如何创建start和end对象?您是否验证了您的输入数据被解释为您想要的dd/mm/yyyy,而不是mm/dd/yyyy?

如果第一个分量('01‘表示开始和结束)被解释为月份而不是日期,则0的差值将是完全正确的。此外,如果是这样的话,在结束日期中使用'02‘将(再次正确地)表现为您所描述的方式。

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

https://stackoverflow.com/questions/5571192

复制
相关文章

相似问题

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