2010-04-27 12 views
6

Estoy tratando de crear una fecha en la era BC, pero fracasando bastante duro. Las siguientes declaraciones de ‘4713’ como el año, en lugar de ‘-4712’:Cómo crear una fecha específica en el pasado distante, la era de Columbia Británica

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]); 

Alguna idea de lo que estoy haciendo mal?

ACTUALIZACIÓN: Código de Trabajo

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]); 

Esto imprime 0 para la época, tal como explicó Ben.

Respuesta

6

Su código está funcionando realmente bien. Como no hay año cero, -4712 es el año 4713 aC. Si revisas el componente de la época, verás que es cero, lo que en el calendario gregoriano indica BC. Dale la vuelta a ese signo negativo y verás 4712 AD (era 1).

+0

Sabía que me faltaba una pieza del rompecabezas :) ¡Muchas gracias! (Se agregó una versión actualizada del código) – alloy

Cuestiones relacionadas