-(NSDate *)getMIDnightTommorow { NSCalendarDate *Now = [NSCalendarDate date]; NSCalendarDate *tomorrow = [Now dateByAddingYears:0 months:0 days:1 hours:0 minutes:0 seconds:0]; return [NSCalendarDate dateWithYear:[tomorrow yearOfCommonEra] month:[tomorrow monthOfYear] day:[tomorrow dayOfMonth] hour:0 minute:0 second:0 timeZone:[tomorrow timeZone]];}
请注意,我一直想要下一个午夜,即使它是午夜,当我打电话,但如果它恰好是23:59:59,我当然想要一秒钟的午夜.
自然语言功能似乎是片面的,我不知道Cocoa会如何在“day”字段中通过32. (如果这样工作,我可以删除[Now dateByAddingYears:…]调用)
解决方法 从 documentation:Use of NSCalendarDate strongly
discouraged. It is not deprecated yet,
however it may be in the next major OS
release after Mac OS X v10.5. For
calendrical calculations,you should
use suitable combinations of
NSCalendar,NSDate,and
NSDateComponents,as described in
Calendars in 07001.
接下来的建议:
NSDate *today = [NSDate date];NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIDentifIEr:NSGregorianCalendar];NSDateComponents *components = [[NSDateComponents alloc] init];components.day = 1;NSDate *tomorrow = [gregorian dateByAddingComponents:components toDate:today options:0];[components release];NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;components = [gregorian components:unitFlags fromDate:tomorrow];components.hour = 0;components.minute = 0;NSDate *tomorrowMIDnight = [gregorian dateFromComponents:components];[gregorian release];[components release];
(如果这是最有效的实现,我不太清楚,但它应该作为指向正确方向的指针.)
注意:理论上,您可以通过允许具有大于组件正常值范围的值的日期组件对象来减少代码量(例如,简单地将1添加到日组件中,这可能导致其值为32 ).但是,尽管dateFromComponents:可以容忍超出范围的值,但不能保证.强烈建议您不要依赖它.
总结以上是内存溢出为你收集整理的可可 – 明天午夜有更好的方法吗?全部内容,希望文章能够帮你解决可可 – 明天午夜有更好的方法吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)