NSDate的-dateWithNaturalLanguageString:在iPhone上?
-
20-09-2019 - |
题
在第i 对于NSDate的电话文档集的,在他们讨论-dateWithNaturalLanguageString:locale:
讨论区,但他们并不在别处文件鉴别方法在页面上。
我以前使用的方法为iPhone和它的工作就好了,虽然我得到了警告。如今,我将建设有-Werror
(这是我应该做的事情一直^ _ ^),我碰到这个警告。
如何将取代的下列代码行?
NSDate *today = [NSDate dateWithNaturalLanguageString:@"today at 23:59:59"];
NSDate *tomorrow = [NSDate dateWithNaturalLanguageString:@"tomorrow at 23:59:59"];
解决方案
要做到这一点的一种方法是用NSCalendar和NSDateComponents。
今天就为23:59:59:
NSDate *now = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *comps = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit
fromDate:date];
[comps setHour:23];
[comps setMinute:59];
[comps setSecond:59];
NSDate *today = [calendar dateFromComponents:comps];
要得到明天在23时59分59秒:
NSDate *now = [NSDate dateWithTimeIntervalSinceNow:24 * 60 * 60]; // 24h from now
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *comps = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit
fromDate:date];
[comps setHour:23];
[comps setMinute:59];
[comps setSecond:59];
NSDate *tomorrow = [calendar dateFromComponents:comps];
其他提示
让我们假设:
static const unsigned long seconds_per_day = 60 * 60 * 24;
您现在可以拿到,现在+ 24小时:
NSDate* today = [NSDate date]; // set for today
NSDate* tomorrow = [today addTimeInterval:seconds_per_day];
为了获得半夜的某一天,一定要记住NSDate*
重要的是免费电话桥接CFDateRef
,它提供了你需要使用一些额外的API。特别地,可以将NSDate
转换为CFAbsoluteTime
与CFDateGetAbsoluteTime
:
CFAbsoluteTime abstime = CFDateGetAbsoluteTime(reinterpret_cast<CFDateRef>(myNSDate));
long long inttime = static_cast<long long>(abstime);
inttime = (inttime / seconds_per_day) * seconds_per_day; // clips the time to midnight
NSDate* myNSDateAtMidnight = reinterpret_cast<NSDate*>(CFDateCreate(NULL,
static_cast<CFAbsoluteTime>(inttime)));
...您可以包装成一个函数既today
和tomorrow
四舍五入到午夜。
不隶属于 StackOverflow