2010-04-27 29 views
6

Tôi đang cố gắng tạo một ngày trong kỷ nguyên BC, nhưng không gặp khó khăn. Nội dung sau trả về ‘4713’ làm năm, thay vì ‘-4712’:Cách tạo một ngày cụ thể trong quá khứ xa xôi, thời đại 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]); 

Bất kỳ ý tưởng nào tôi đang làm sai?

CẬP NHẬT: Mã Working

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

này in 0 cho thời đại, cũng giống như Ben giải thích.

Trả lời

6

Mã của bạn thực sự hoạt động tốt. Vì không có năm 0, -4712 là năm 4713 trước Công Nguyên. Nếu bạn kiểm tra thành phần thời đại bạn sẽ thấy rằng đó là số không, trong lịch Gregorian chỉ ra BC. Lật dấu âm và bạn sẽ thấy 4712 AD (kỷ nguyên 1).

+0

Tôi biết tôi đã bỏ lỡ một phần của câu đố :) Cảm ơn rất nhiều! (Đã thêm phiên bản cập nhật của mã) – alloy

Các vấn đề liên quan