NSDateComponents 给出奇怪的结果

Posted

技术标签:

【中文标题】NSDateComponents 给出奇怪的结果【英文标题】:NSDateComponents giving odd results 【发布时间】:2010-11-10 09:11:18 【问题描述】:

我正在创建一个每周日历视图,其中一部分是计算所显示一周的第一天。我还希望保存的日期具有第一秒的时间,所以我试图确保日期的 hh:mm:ss 都是 00:00:00。

我有以下代码,它在大多数情况下都可以正常工作,但当日期大约在一年的开始或结束时会给出看似随机的结果。

unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit | NSWeekCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;

NSDateComponents *comps = [gregorian components:unitFlags fromDate:self.selectedDate];
NSDateComponents *addcomps = [[NSDateComponents alloc] init];
[addcomps setDay:1-[comps weekday]];

NSDate *fixedDate = [appDelegate.gregorian dateByAddingComponents:addcomps toDate:self.selectedDate options:0];
////FIXED DATE IS NOW FIRST DAY OF DISPLAYED WEEK

comps = [appDelegate.gregorian components:unitFlags fromDate:fixedDate]; ///fixedDate = 2010-01-03 02:51:25 -0600
[comps setHour:0];
[comps setMinute:0];
[comps setSecond:0];
self.savedBeginningDate = [appDelegate.gregorian dateFromComponents:comps]; ///self.savedBeginningDate = 2011-01-09 00:00:00 -0600

不知何故,将 hh:mm:ss 设置为 00:00:00 会将日期从 2010 年 1 月 3 日更改为 2009 年 1 月 11 日。

我已将 dateFromComponents 的结果作为 cmets 添加到这些行上。这种奇怪的行为似乎只在一年左右发生,并且在我见过的任何其他星期都不会发生。

感谢您的帮助!

【问题讨论】:

【参考方案1】:

我想通了:我必须从 unitFlags 中取出 NSWeekCalendarUnit。不知道为什么,但由于某种原因,日期计算不正确!

【讨论】:

以上是关于NSDateComponents 给出奇怪的结果的主要内容,如果未能解决你的问题,请参考以下文章

NSDate 转换 NSDateComponents 问题

NSDateComponents 返回意外结果

QFontMetrics 给出等宽字体的奇怪结果

当 UIAlertView 存在时,没有动画的方向会给出奇怪的结果

useState 与数组给出奇怪的结果

Android OpenCV:颜色检测给出奇怪的结果