2010-04-27 4 views
6

Ich versuche, ein Datum in der BC-Ära zu erstellen, aber ziemlich hart ausfallen. Der folgende Code gibt ‚4713‘ als das Jahr, statt ‚-4712‘:So erstellen Sie ein bestimmtes Datum in der fernen Vergangenheit, die BC-Ära

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

Jede Idee, was ich falsch mache?

UPDATE: Arbeits Code

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

Dieser druckt 0 für die Zeit, so wie Ben erklärt.

Antwort

6

Ihr Code funktioniert tatsächlich gut. Da es kein Jahr Null gibt, ist -4712 das Jahr 4713 BC. Wenn Sie die Äquatorkomponente überprüfen, sehen Sie, dass es Null ist, was im Gregorianischen Kalender BC anzeigt. Drehe das negative Zeichen um und du wirst 4712 AD (Ära 1) sehen.

+0

Ich wusste, dass ich ein Stück des Puzzles vermisste :) Vielen Dank! (Hinzugefügt aktualisierte Version des Codes) – alloy

Verwandte Themen