سؤال

في الأولDocset Phone 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, ، والتي توفر بعض واجهات برمجة التطبيقات الإضافية التي تريد استخدامها. على وجه الخصوص، يمكنك تحويل 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 إلى منتصف الليل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top