Mac OS X では、[システム設定] > [日付と時刻] > [言語とテキストを開く] > [上部] の [形式] をクリックして、カレンダーのドロップ ダウンで、コプティック カレンダーのオプションを選択します。このカレンダーを Mac アプリケーションで表示するにはどうすればよいですか?
1 に答える
このカレンダーを Mac アプリケーションで表示するにはどうすればよいですか?
さて、ディスプレイとはどういう意味ですか? 計算にコプト暦を使用したいだけですか? その場合、必要なのは適切なNSCalendar
インスタンスだけです。(および友人)はICUによってサポートされているため、ICUがサポートする任意の識別子をNSCalendar
使用できます(「キー/タイプ定義」の下)。つまり、次の中から選択できます。
gregorian
- (デフォルト)islamic
- 天文アラビア語chinese
- 繁体字のカレンダーislamic-civil
- 市民 (アルゴリズム) アラビア暦hebrew
- 伝統的なヘブライ暦japanese
- 帝国暦 (西暦以外はグレゴリオ暦と同じで、皇帝ごとに元号が 1 つずつあります)buddhist
・タイ仏暦(西暦以外はグレゴリオ暦と同じ)persian
- ペルシャのカレンダーcoptic
- コプト暦ethiopic
- エチオピア暦
したがって、NSCalendar
インスタンスを取得するには、次の問題になります。
NSCalendar *coptic = [[NSCalendar alloc] initWithCalendarIdentifier:@"coptic"];
ただし、実際に何らかの UI (iCal 風) を描画したい場合は、さらに多くの情報が必要です。幸いなことに、 からも取得できますNSCalendar
。
たとえば、カレンダーの月数を知る必要があります。
NSRange minMonthRange = [coptic minimumRangeOfUnit:NSMonthCalendarUnit]; // {1,13}
NSRange maxMonthRange = [coptic maximumRangeOfUnit:NSMonthCalendarUnit]; // {1,13}
したがって、毎年 13 か月あるように見えます。では、1 か月の日数はどうでしょうか。
NSRange minDayRange = [coptic minimumRangeOfUnit:NSDayCalendarUnit]; // {1,5}
NSRange maxDayRange = [coptic maximumRangeOfUnit:NSDayCalendarUnit]; // {1,30}
うわあ!5日しかない月もありそうですね!(ただし、1 か月が 30 日を超えることはありません) もう少し調べられるかどうか見てみましょう。
NSDateComponents *firstDayOfMonth = [[NSDateComponents alloc] init];
[firstDayOfMonth setDay:1];
for (NSInteger y = 1500; y < 1520; ++y) {
[firstDayOfMonth setYear:y];
for (NSInteger m = 1; m <= 13; ++m) {
[firstDayOfMonth setMonth:m];
NSDate *date = [coptic dateFromComponents:firstDayOfMonth];
NSRange rangeOfDaysInMonth = [coptic rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:date];
NSLog(@"%d - %d => %@", y, m, NSStringFromRange(rangeOfDaysInMonth));
}
}
これは 20 年間繰り返さNSDate
れ、各年の各月の最初の日に対応する を構築します。次に、その月の日数を確認し、結果をログに記録します。1500
(と1520
は私が選んだ任意の年であることに注意してください)
これはログに記録します:
1500 - 1 => {1, 30}
1500 - 2 => {1, 30}
1500 - 3 => {1, 30}
1500 - 4 => {1, 30}
1500 - 5 => {1, 30}
1500 - 6 => {1, 30}
1500 - 7 => {1, 30}
1500 - 8 => {1, 30}
1500 - 9 => {1, 30}
1500 - 10 => {1, 30}
1500 - 11 => {1, 30}
1500 - 12 => {1, 30}
1500 - 13 => {1, 5}
1501 - 1 => {1, 30}
1501 - 2 => {1, 30}
1501 - 3 => {1, 30}
1501 - 4 => {1, 30}
1501 - 5 => {1, 30}
1501 - 6 => {1, 30}
1501 - 7 => {1, 30}
1501 - 8 => {1, 30}
1501 - 9 => {1, 30}
1501 - 10 => {1, 30}
1501 - 11 => {1, 30}
1501 - 12 => {1, 30}
1501 - 13 => {1, 5}
1502 - 1 => {1, 30}
1502 - 2 => {1, 30}
1502 - 3 => {1, 30}
1502 - 4 => {1, 30}
1502 - 5 => {1, 30}
1502 - 6 => {1, 30}
1502 - 7 => {1, 30}
1502 - 8 => {1, 30}
1502 - 9 => {1, 30}
1502 - 10 => {1, 30}
1502 - 11 => {1, 30}
1502 - 12 => {1, 30}
1502 - 13 => {1, 5}
1503 - 1 => {1, 30}
1503 - 2 => {1, 30}
1503 - 3 => {1, 30}
1503 - 4 => {1, 30}
1503 - 5 => {1, 30}
1503 - 6 => {1, 30}
1503 - 7 => {1, 30}
1503 - 8 => {1, 30}
1503 - 9 => {1, 30}
1503 - 10 => {1, 30}
1503 - 11 => {1, 30}
1503 - 12 => {1, 30}
1503 - 13 => {1, 6}
1504 - 1 => {1, 30}
1504 - 2 => {1, 30}
1504 - 3 => {1, 30}
1504 - 4 => {1, 30}
1504 - 5 => {1, 30}
1504 - 6 => {1, 30}
1504 - 7 => {1, 30}
1504 - 8 => {1, 30}
1504 - 9 => {1, 30}
1504 - 10 => {1, 30}
1504 - 11 => {1, 30}
1504 - 12 => {1, 30}
1504 - 13 => {1, 5}
1505 - 1 => {1, 30}
1505 - 2 => {1, 30}
1505 - 3 => {1, 30}
1505 - 4 => {1, 30}
1505 - 5 => {1, 30}
1505 - 6 => {1, 30}
1505 - 7 => {1, 30}
1505 - 8 => {1, 30}
1505 - 9 => {1, 30}
1505 - 10 => {1, 30}
1505 - 11 => {1, 30}
1505 - 12 => {1, 30}
1505 - 13 => {1, 5}
1506 - 1 => {1, 30}
1506 - 2 => {1, 30}
1506 - 3 => {1, 30}
1506 - 4 => {1, 30}
1506 - 5 => {1, 30}
1506 - 6 => {1, 30}
1506 - 7 => {1, 30}
1506 - 8 => {1, 30}
1506 - 9 => {1, 30}
1506 - 10 => {1, 30}
1506 - 11 => {1, 30}
1506 - 12 => {1, 30}
1506 - 13 => {1, 5}
1507 - 1 => {1, 30}
1507 - 2 => {1, 30}
1507 - 3 => {1, 30}
1507 - 4 => {1, 30}
1507 - 5 => {1, 30}
1507 - 6 => {1, 30}
1507 - 7 => {1, 30}
1507 - 8 => {1, 30}
1507 - 9 => {1, 30}
1507 - 10 => {1, 30}
1507 - 11 => {1, 30}
1507 - 12 => {1, 30}
1507 - 13 => {1, 6}
1508 - 1 => {1, 30}
1508 - 2 => {1, 30}
1508 - 3 => {1, 30}
1508 - 4 => {1, 30}
1508 - 5 => {1, 30}
1508 - 6 => {1, 30}
1508 - 7 => {1, 30}
1508 - 8 => {1, 30}
1508 - 9 => {1, 30}
1508 - 10 => {1, 30}
1508 - 11 => {1, 30}
1508 - 12 => {1, 30}
1508 - 13 => {1, 5}
1509 - 1 => {1, 30}
1509 - 2 => {1, 30}
1509 - 3 => {1, 30}
1509 - 4 => {1, 30}
1509 - 5 => {1, 30}
1509 - 6 => {1, 30}
1509 - 7 => {1, 30}
1509 - 8 => {1, 30}
1509 - 9 => {1, 30}
1509 - 10 => {1, 30}
1509 - 11 => {1, 30}
1509 - 12 => {1, 30}
1509 - 13 => {1, 5}
1510 - 1 => {1, 30}
1510 - 2 => {1, 30}
1510 - 3 => {1, 30}
1510 - 4 => {1, 30}
1510 - 5 => {1, 30}
1510 - 6 => {1, 30}
1510 - 7 => {1, 30}
1510 - 8 => {1, 30}
1510 - 9 => {1, 30}
1510 - 10 => {1, 30}
1510 - 11 => {1, 30}
1510 - 12 => {1, 30}
1510 - 13 => {1, 5}
1511 - 1 => {1, 30}
1511 - 2 => {1, 30}
1511 - 3 => {1, 30}
1511 - 4 => {1, 30}
1511 - 5 => {1, 30}
1511 - 6 => {1, 30}
1511 - 7 => {1, 30}
1511 - 8 => {1, 30}
1511 - 9 => {1, 30}
1511 - 10 => {1, 30}
1511 - 11 => {1, 30}
1511 - 12 => {1, 30}
1511 - 13 => {1, 6}
1512 - 1 => {1, 30}
1512 - 2 => {1, 30}
1512 - 3 => {1, 30}
1512 - 4 => {1, 30}
1512 - 5 => {1, 30}
1512 - 6 => {1, 30}
1512 - 7 => {1, 30}
1512 - 8 => {1, 30}
1512 - 9 => {1, 30}
1512 - 10 => {1, 30}
1512 - 11 => {1, 30}
1512 - 12 => {1, 30}
1512 - 13 => {1, 5}
1513 - 1 => {1, 30}
1513 - 2 => {1, 30}
1513 - 3 => {1, 30}
1513 - 4 => {1, 30}
1513 - 5 => {1, 30}
1513 - 6 => {1, 30}
1513 - 7 => {1, 30}
1513 - 8 => {1, 30}
1513 - 9 => {1, 30}
1513 - 10 => {1, 30}
1513 - 11 => {1, 30}
1513 - 12 => {1, 30}
1513 - 13 => {1, 5}
1514 - 1 => {1, 30}
1514 - 2 => {1, 30}
1514 - 3 => {1, 30}
1514 - 4 => {1, 30}
1514 - 5 => {1, 30}
1514 - 6 => {1, 30}
1514 - 7 => {1, 30}
1514 - 8 => {1, 30}
1514 - 9 => {1, 30}
1514 - 10 => {1, 30}
1514 - 11 => {1, 30}
1514 - 12 => {1, 30}
1514 - 13 => {1, 5}
1515 - 1 => {1, 30}
1515 - 2 => {1, 30}
1515 - 3 => {1, 30}
1515 - 4 => {1, 30}
1515 - 5 => {1, 30}
1515 - 6 => {1, 30}
1515 - 7 => {1, 30}
1515 - 8 => {1, 30}
1515 - 9 => {1, 30}
1515 - 10 => {1, 30}
1515 - 11 => {1, 30}
1515 - 12 => {1, 30}
1515 - 13 => {1, 6}
1516 - 1 => {1, 30}
1516 - 2 => {1, 30}
1516 - 3 => {1, 30}
1516 - 4 => {1, 30}
1516 - 5 => {1, 30}
1516 - 6 => {1, 30}
1516 - 7 => {1, 30}
1516 - 8 => {1, 30}
1516 - 9 => {1, 30}
1516 - 10 => {1, 30}
1516 - 11 => {1, 30}
1516 - 12 => {1, 30}
1516 - 13 => {1, 5}
1517 - 1 => {1, 30}
1517 - 2 => {1, 30}
1517 - 3 => {1, 30}
1517 - 4 => {1, 30}
1517 - 5 => {1, 30}
1517 - 6 => {1, 30}
1517 - 7 => {1, 30}
1517 - 8 => {1, 30}
1517 - 9 => {1, 30}
1517 - 10 => {1, 30}
1517 - 11 => {1, 30}
1517 - 12 => {1, 30}
1517 - 13 => {1, 5}
1518 - 1 => {1, 30}
1518 - 2 => {1, 30}
1518 - 3 => {1, 30}
1518 - 4 => {1, 30}
1518 - 5 => {1, 30}
1518 - 6 => {1, 30}
1518 - 7 => {1, 30}
1518 - 8 => {1, 30}
1518 - 9 => {1, 30}
1518 - 10 => {1, 30}
1518 - 11 => {1, 30}
1518 - 12 => {1, 30}
1518 - 13 => {1, 5}
1519 - 1 => {1, 30}
1519 - 2 => {1, 30}
1519 - 3 => {1, 30}
1519 - 4 => {1, 30}
1519 - 5 => {1, 30}
1519 - 6 => {1, 30}
1519 - 7 => {1, 30}
1519 - 8 => {1, 30}
1519 - 9 => {1, 30}
1519 - 10 => {1, 30}
1519 - 11 => {1, 30}
1519 - 12 => {1, 30}
1519 - 13 => {1, 6}
これを分析すると、(通常) 5 日である 13 番目の月を除いて、各月は 30 日であることがわかります。4年に一度、13番目の月は6日あるようです。それがうるう日を処理する方法に違いありません。これは確かに良いカレンダーです!すべてが素晴らしく、規則的です。
もう少し調べてみましょう。
NSRange minHourRange = [coptic minimumRangeOfUnit:NSHourCalendarUnit]; // {0,24}
NSRange maxHourRange = [coptic maximumRangeOfUnit:NSHourCalendarUnit]; // {0,24}
したがって、毎日は 24 時間です (サマータイムのジャンプは、この範囲には反映されません。グレゴリオ暦では、DST の移行に応じて、23 時間または 25 時間になる日もありますが、最小時間範囲{0,24}
および最大時間範囲も報告されます。 {0,24}
)。
分と秒のレベル (それぞれ 60) も正常です。
そのため、自分でカレンダーを表示したい場合は、1 年に 13 か月を処理できる UI が必要になります。そのうちの 1 か月は 1 週間未満です。サブデイレベルでは、物事は私たちが慣れているものです.
もちろん、コプト暦に関するウィキペディアの記事を読むこともできます。
編集(コメントに基づく)
日付を文字列としてフォーマットすることだけが必要な場合は、(もちろん)次のようになりNSDateFormatter
ます。
NSDateFormatter *f = [[NSDateFormatter alloc] init];
NSCalendar *coptic = [[NSCalendar alloc] initWithCalendarIdentifier:@"coptic"];
[f setCalendar:coptic];
[f setDateStyle:NSDateFormatterLongStyle];
NSDate *rightNow = [NSDate date];
NSString *formattedDate = [f stringFromDate:rightNow];
NSLog(@"%@", formattedDate); // logs "Bashans 4, 1728"