NSDate -dateWithNaturalLanguageString: no iPhone?

votos
0

No i DocSet telefone para NSDate , na área de discussão eles discutem -dateWithNaturalLanguageString:locale:, no entanto eles não documentar o método em outro lugar na página.

Eu usei o método antes para iPhone e funcionou muito bem, embora eu tenho avisos. Agora que eu estou construindo com -Werror(o que eu deveria ter sido feito ao longo de toda ^ _ ^) eu correr em um aviso com este.

Como eu iria substituir as seguintes linhas de código?

NSDate *today = [NSDate dateWithNaturalLanguageString:@today at 23:59:59];
NSDate *tomorrow = [NSDate dateWithNaturalLanguageString:@tomorrow at 23:59:59];
Publicado 27/08/2009 em 03:27
fonte usuário
Em outras línguas...                            


2 respostas

votos
2

Uma maneira de fazer isso é com NSCalendar e NSDateComponents.

Para chegar hoje às 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];

Para chegar amanhã às 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];
Respondeu 27/08/2009 em 22:56
fonte usuário

votos
1

Vamos assumir:

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

Você pode obter agora e agora + 24 horas com:

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

A fim de obter a meia-noite para o dia dado, é importante lembrar que NSDate*é uma ponte de ligação gratuita CFDateRef, que fornece algumas APIs adicionais que você vai querer usar. Em particular, você pode converter um NSDatea um CFAbsoluteTimecom 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 você pode envolver em uma função para arredondar ambos todaye tomorrowà meia-noite.

Respondeu 27/08/2009 em 04:16
fonte usuário

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