Objective c iOS请勿打扰错误是否导致此错误?
我试图找出最近的请勿打扰bug()是否影响了我的代码。我想知道上周一午夜的日期和时间戳。因为我是在周一写这篇文章的,所以我希望得到今天的日期(2013年1月7日),但我现在是2013年1月4日 我正在跟踪,但我正在尝试修改它以查找上一个星期一,而不是星期天Objective c iOS请勿打扰错误是否导致此错误?,objective-c,ios,nsdate,nsdatecomponents,Objective C,Ios,Nsdate,Nsdatecomponents,我试图找出最近的请勿打扰bug()是否影响了我的代码。我想知道上周一午夜的日期和时间戳。因为我是在周一写这篇文章的,所以我希望得到今天的日期(2013年1月7日),但我现在是2013年1月4日 我正在跟踪,但我正在尝试修改它以查找上一个星期一,而不是星期天 +(NSTimeInterval)StartOfWeekMonday { NSTimeInterval finalTime = -1; NSInteger weekday; NSDate *monday = 0;
+(NSTimeInterval)StartOfWeekMonday {
NSTimeInterval finalTime = -1;
NSInteger weekday;
NSDate *monday = 0;
NSCalendar *greg = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *weekdays = [greg components:NSWeekdayCalendarUnit fromDate:[NSDate date]];
NSDateComponents *subtract = [[NSDateComponents alloc] init];
NSDateComponents *final = 0;
weekday = ( weekdays.weekday == 1 ) ? 6 : weekdays.weekday;
[subtract setDay:(0 - weekday - 1)];
monday = [greg dateByAddingComponents:subtract toDate:[NSDate date] options:0];
final = [greg components:(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit) fromDate:monday];
monday = [greg dateFromComponents:final];
#ifdef DEBUG
NSLog( @"%s - %d -> Weekday: %d", __FILE__, __LINE__, weekday );
NSLog( @"%s - %d -> Monday: %@", __FILE__, __LINE__, [monday descriptionWithLocale:[NSLocale currentLocale]] );
#endif
finalTime = [monday timeIntervalSince1970];
return finalTime;
}
我的注销记录如下,工作日是正确的(我在星期一写这篇文章),但日期显然是错误的,应该是星期一:2013年1月7日星期一,上午12:00
2013-01-07 15:07:33.792 MY-APP[5524:14c03] Weekday: 2
2013-01-07 15:07:36.757 MY-APP[5524:14c03] Monday: Friday, January 4, 2013, 12:00:00 AM Eastern Standard Time
这是在模拟器现在,但我所有的其他日期计算给出了预期值
是我受到了最近的请勿打扰错误的影响,不得不等到明天(2013年1月8日)才能看到预期结果,还是我遗漏了一些完全不同的东西?问题在于如何计算减法。要么我完全误解了苹果提供的例子,要么不够清楚。计算减法的解决方案如下:
weekday = ( weekdays.weekday == 1 ) ? 8 : weekdays.weekday;
toSubtract = ( 2 - weekday );
[subtract setDay:toSubtract];
运行各种测试产生了正确的“星期一”。最后,这与影响请勿打扰的日期错误无关。关于DND错误的文章可能不正确;解释所依据的ISO日历和公历之间不存在差异:(见更新第二段)。你有没有试过从一个虚拟日期开始计算,或者把你的系统时钟移动?这应该给你一些线索。@JoshCaswell嘿,这些是传播FUD的后果。。。“该漏洞可能与ISO周计算有关,也可能与ISO周计算无关;但本文中的计算结果在几个方面肯定存在缺陷。负责该问题的博主已被解雇。”