NSDate -dateWithNaturalLanguageString: sur iPhone?

voix
0

Dans le i Téléphone pour NSDate Doc Niveau , dans la zone de discussion , ils discutent -dateWithNaturalLanguageString:locale:, mais ils ne documentent pas la méthode ailleurs sur la page.

Je l' ai utilisé la méthode avant pour l' iPhone et cela a fonctionné très bien, même si je suis arrivé avertissements. Maintenant que je construis avec -Werror(que j'aurait dû faire tout au long de ^ _ ^) J'ai rencontré un avertissement à ce sujet .

Comment puis-je remplacer les lignes de code ci-dessous?

NSDate *today = [NSDate dateWithNaturalLanguageString:@today at 23:59:59];
NSDate *tomorrow = [NSDate dateWithNaturalLanguageString:@tomorrow at 23:59:59];
Créé 27/08/2009 à 03:27
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
1

Assumons:

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

Vous pouvez maintenant obtenir et maintenant + 24 heures avec:

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

Afin d'obtenir minuit le jour indiqué, il est important de se rappeler que NSDate*ponté à sans frais CFDateRef, ce qui fournit des API supplémentaires que vous aurez envie d'utiliser. Vous pouvez en particulier convertir un NSDateà un CFAbsoluteTimeavec 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)));

... que vous pouvez envelopper dans une fonction pour arrondir à la fois todayet tomorrowà minuit.

Créé 27/08/2009 à 04:16
source utilisateur

voix
2

Une façon de le faire est avec NSCalendar et NSDateComponents.

Pour obtenir aujourd'hui à 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];

Pour obtenir demain à 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];
Créé 27/08/2009 à 22:56
source utilisateur

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