【发布时间】:2014-02-12 13:12:07
【问题描述】:
我希望显示 NSDate 对象的月份数。
//Make Date Six Months In The Future
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *sixMonthsFromNow = [[NSDateComponents alloc] init];
[sixMonthsFromNow setMonth:6];
NSDate *finishDate = [calendar dateByAddingComponents:sixMonthsFromNow toDate:[NSDate date] options:0]; //Six Months Time
//Display
NSCalendarUnit requiredFormat = NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents *dateComponents = [calendar components:requiredFormat fromDate:[NSDate date] toDate:finishDate options:0];
NSLog(@"%d months %d days %d hours %d minutes %d seconds", [dateComponents month], [dateComponents day], [dateComponents hour], [dateComponents minute], [dateComponents second]);
这个输出:5 months 29 days 23 hours 59 minutes 59 seconds
这很好,但我只想显示月数。
如果我只限制几个月:
//Make Date Six Months In The Future
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *sixMonthsFromNow = [[NSDateComponents alloc] init];
[sixMonthsFromNow setMonth:6];
NSDate *finishDate = [calendar dateByAddingComponents:sixMonthsFromNow toDate:[NSDate date] options:0]; //Six Months Time
//Display
NSCalendarUnit requiredFormat = NSMonthCalendarUnit;
NSDateComponents *dateComponents = [calendar components:requiredFormat fromDate:[NSDate date] toDate:finishDate options:0];
NSLog(@"%d months", [dateComponents month]);
这个输出:5 months
虽然这在技术上是正确的,但我想将天数四舍五入以使其输出六个月。
有没有简单的方法来达到这个效果?我注意到 NSDateComponents 上没有舍入属性。我是否必须手动检查天数并决定四舍五入?
我的最终目标是不仅将舍入效果限制为几个月,如果我只提供以下内容,这应该能够将几小时到几天:NSDayCalendarUnit
【问题讨论】:
-
输出不完全是“6 个月”的原因是你调用了两次
[NSDate date],并且用于计算finishDate的日期和使用的日期之间可能存在毫秒差异计算差异dateComponents。 -
如果一个月可以有 28、29、30 或 31 天,您如何定义“四舍五入”?
-
公平,保留对原始日期的引用确实可以正确计算日期,但这只是一个示例。它可以是任何不完美的六个月之后的日期。四舍五入确实是我需要帮助的地方,但似乎它必须由用户定义。为寻找干杯。
标签: ios iphone objective-c xcode nsdatecomponents