Comment créer une date spécifique dans le lointain passé, l'ère de la Colombie-Britannique
-
01-10-2019 - |
Question
Je suis en train de créer une date à l'ère de la Colombie-Britannique, mais à défaut assez difficile. Les rendements suivants « 4713 » comme l'année, au lieu de « -4712 »:
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]);
Toute idée de ce que je fais mal?
MISE À JOUR: Code de travail
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]);
Cette impression 0 pour l'époque, tout comme Ben expliqué.
La solution
Votre code fonctionne vraiment bien. Comme il n'y a pas d'année zéro, -4712 est l'année 4713 en Colombie-Britannique. Si vous cochez la composante de l'époque, vous verrez que c'est zéro, ce qui dans le calendrier grégorien indique la Colombie-Britannique. Retournez ce signe négatif et vous verrez 4712 AD (ère 1).
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow