NSDate -dateWithNaturalLanguageString: na iPhone?

hlasů
0

Ve i telefon docset pro NSDate v diskusním oblasti diskutují -dateWithNaturalLanguageString:locale:, ale nemají dokumentují způsob jinde na stránce.

Už jsem použil metodu pro iPhone a fungovalo to v pohodě, i když jsem dostal varování. Teď, když Stavím se -Werror(což bych dělal po celou dobu ^ _ ^) jsem narazil na varování s tím.

Jak bych mohl nahradit následující řádky kódu?

NSDate *today = [NSDate dateWithNaturalLanguageString:@today at 23:59:59];
NSDate *tomorrow = [NSDate dateWithNaturalLanguageString:@tomorrow at 23:59:59];
Položena 27/08/2009 v 03:27
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
2

Jedním ze způsobů, jak toho dosáhnout, je s NSCalendar a NSDateComponents.

Chcete-li získat dnes v 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];

Chcete-li získat zítra v 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];
Odpovězeno 27/08/2009 v 22:56
zdroj uživatelem

hlasů
1

Předpokládejme, že:

static const unsigned long seconds_per_day = 60 * 60 * 24;

Můžete získat hned a teď + 24 hodin s:

NSDate* today = [NSDate date]; // set for today
NSDate* tomorrow = [today addTimeInterval:seconds_per_day];

Ve snaze získat půlnoci pro daný den, je důležité si uvědomit, že NSDate*je bezplatná přemostěny CFDateRef, který poskytuje určité dodatečné API budete chtít použít. Zejména můžete převést NSDatedo A CFAbsoluteTimes 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)));

... které můžete zabalit do funkce zaokrouhlit tak todayi tomorrowdo půlnoci.

Odpovězeno 27/08/2009 v 04:16
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more