6

紀元前の日付を作成しようとしていますが、かなり失敗しています。次の例では、年として「-4712」ではなく「4713」が返されます。

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

私が間違っていることは何か分かりますか?

更新:作業コード

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

ベンが説明したように、これは時代の 0 を出力します。

4

1 に答える 1

6

あなたのコードは実際にうまく機能しています。ゼロ年がないため、-4712 は紀元前 4713 年です。紀元コンポーネントを確認すると、それがゼロであることがわかります。これは、グレゴリオ暦では紀元前を示しています。そのマイナス記号を反転すると、西暦 4712 年 (時代 1) が表示されます。

于 2010-04-27T14:00:50.520 に答える