2010-04-27 5 views
6

Sto provando a creare una data nell'era BC, ma non riuscendo abbastanza. Il seguente ritorna '4713' come l'anno, invece di '-4712':Come creare una data specifica nel lontano passato, l'era BC

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDateComponents *components = [NSDateComponents new]; 
    [components setYear: -4712]; 
    NSDate *date = [calendar dateFromComponents:components]; 
    NSLog(@"%d", [[calendar components:NSYearCalendarUnit fromDate: date] year]); 

Qualche idea di cosa sto facendo male?

UPDATE: il codice di lavoro

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDateComponents *components = [NSDateComponents new]; 
    [components setYear: -4712]; 
    NSDate *date = [calendar dateFromComponents:components]; 
    NSDateComponents *newComponents = [calendar components:NSEraCalendarUnit|NSYearCalendarUnit fromDate:date]; 
    NSLog(@"Era: %d, year %d", [newComponents era], [newComponents year]); 

Viene stampata 0 per l'epoca, proprio come ha spiegato Ben.

risposta

6

Il tuo codice funziona correttamente. Dato che non esiste un anno zero, -4712 è l'anno 4713 aC. Se controlli la componente dell'era vedrai che è zero, che nel calendario gregoriano indica BC. Capovolgi quel segno negativo e vedrai 4712 AD (era 1).

+0

Sapevo che mi mancava un pezzo del puzzle :) Grazie mille! (Aggiunta versione aggiornata del codice) – alloy

Problemi correlati