NSCalendar 获取现在和年底之间的日期差异给出零月份

Posted

技术标签:

【中文标题】NSCalendar 获取现在和年底之间的日期差异给出零月份【英文标题】:NSCalendar to get date difference between now and end of year gives a zero month 【发布时间】:2012-11-05 12:37:47 【问题描述】:

当我尝试获取从现在到年底的日期差异时,我得到的月份为 0。我正在使用NSCalendar 对象来获取两个NSDate 对象之间的差异。

NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setYear:2013];
[comps setMonth:0];
[comps setDay:0];

[comps setHour:0];
[comps setMinute:0];
[comps setSecond:0];

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *newDate = [calendar dateFromComponents:comps];

NSDateComponents *timeDifference = [[NSCalendar currentCalendar] 
    components: NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | 
                NSMinuteCalendarUnit | NSSecondCalendarUnit  
    fromDate:[NSDate date] toDate:newDate options:0];

int months = timeDifference.month;
int days = timeDifference.day;
if (months>0)
    days+=31;
int hours = timeDifference.hour;
int minutes = timeDifference.minute;
int seconds = timeDifference.second; 

【问题讨论】:

【参考方案1】:

您正在尝试计算到 2013 年的月数、天数等​​。在 NSDateComponents 中,0 表示“无值”,所有计数的值都应大于 0。这就是考虑您的 comps 值的原因作为“不完整”,这会导致来自NSCalendar 的奇怪输出。

将第 3-4 行中的 monthday 设置为 1 可解决此问题。

【讨论】:

以上是关于NSCalendar 获取现在和年底之间的日期差异给出零月份的主要内容,如果未能解决你的问题,请参考以下文章

试图在Python中找到用户出生日期和现在之间的天数差异

以周、月、季度和年的形式获取日期之间的差异

JavaScript 中两个日期的年、月、日之间的差异

获取 JavaScript 中两个日期之间的差异? [复制]

如何获取 MySQL 上两个日期之间的差异天数?

我需要从 mysql 数据库中获取日期并打印今天和获取日期之间的差异