クロックでカレンダーを指定する

2010. 05. 25
クロックの作成』で作ったクロックアプリケーションを改造して、カレンダーを設定してみます。

まずNSCalendarクラスについてなのですが、日本語の実例は多いものの概要説明が乏しく、意味不明な訳になってしまったので軽く流すようにしてください。

●NSCalendarクラス

カレンダーは、年の分割や長さ、開始時間といったシステムの計算をし、情報をカプセル化します。

カレンダーとカレンダーの計算のサポート、例えば指定したカレンダーユニットと指定した絶対的な時間に追加したユニットとの範囲を決定する際の情報を提供します。

カレンダーでは、日、週、曜日、月、年を数字で表す際、一般的に1を基礎をとしますが、カレンダー固有の例外があります。

順序を表す数字は1から始まります。

このAPIで表されるいくつかのカレンダーは、基本的な単位の概念として年/月/週/日などを持っています。

例えば、1年を12個の月単位の代わりに、4つの四半期単位で表す事もできます。

カレンダーの計算には、NSDateオブジェクトを連携して使います。

例えば、あるカレンダーと他のカレンダー間で日付を分解して変換する際、最初のカレンダーから使う日付の要素を分解し、その後2つ目のカレンダーを分解して使う必要があります。

NSDateは絶対基準と基準日(参照点)の日付と時刻を提供し、カレンダーの計算やユーザへの表示用に特定のカレンダーに利用することができます。

2つのNSCalendarメソッド、dateFromComponents:とdateByAddingComponents:toDate:options:は、指定されたNSDateComponentsオブジェクトのパラメータから求められたカレンダーの要素を計算し、日付オブジェクトを返します。

貴方が必要とする(または選択できる)多くの要素を提供する事ができます。

不完全な情報で絶対時刻を計算した場合、カレンダーは通常デフォルト値として0と1を選びますが、これはカレンダー特有の選択です。

矛盾する情報を提供する場合は、特定カレンダーの曖昧さ回避を実行してください(これは一つ以上のパラメータを無視して呼び出します)。

関連メソッド(components:fromDate:とcomponents:fromDate:toDate:options:)は、指定した要素をビットマスクパラメータで計算し、NSDateComponentsオブジェクトを返します。

ビットマスクはNSCalendarUnit定数で構成されています。

NSCalendarには、『toll-free bridged』の対象としてCore FoundationのCFCalendar型があります。

これはFoudationオブジェクトを橋渡ししてCore Foundationの型に変換し、関数やメソッドで呼び出せることを意味します。

例えば、NSCalendar *パラメータをメソッドで参照する場合、CFCalendarRefに渡し、CFCalendarRefパラメータとして関数で参照でき、NSCalendarインスタンスに渡す事もできます。

日付型の変換に関する詳細は、『Introduction to Carbon-Cocoa Integration Guide』を参照してください。


●クロックアプリケーションの改造

341

前回同様、クロックアプリケーションのuodateClock:メソッドを改造して、日付表示を和暦にします。
(太字が元のupdateClock:メソッドから追加・修正した部分)

- (void)updateClock:(NSTimer *)theTimer {
    // 現在の日時の取得とフォーマッタの生成
    NSDate *date = [NSDate date];
    NSDateFormatter *form = [[NSDateFormatter alloc] init];

    // 和暦のNSCalendarを生成
    NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSJapaneseCalendar];

    // NSDateFormatterに和暦をセット
    [form setCalendar:cal];


    // 日付の文字列をラベルにセット
    [form setDateFormat:@"GG yy-MM-dd EEE HH:mm"];
    labelDate.text = [form stringFromDate:date];

    // 時刻の文字列をラベルにセット
    [form setDateStyle:NSDateFormatterNoStyle];
    [form setTimeStyle:NSDateFormatterFullStyle];
    labelTime.text = [form stringFromDate:date];

    // インスタンスを破棄
    [cal release];
    [form release];
}


・initWithCalendarIdentifier:
(NSCalendarクラス)

- (id)initWithCalendarIdentifier:(NSString *)string

新規生成されたNSCalendarオブジェクトを、指定された識別子のカレンダーで初期化します

戻り値は初期化されたカレンダー、または識別子が不明な場合はnilを返します
(例えば、認識できない文字列や、現在のOSのバージョンでサポートしていないカレンダーを指定した場合)

string:新しいカレンダーの識別子を指定します


・NSLocale Calendar Keys
(NSLocaleクラス)

NSCalendarインスタンスの識別子定数で、NSLocale.hで定義されています

NSString * const NSGregorianCalendar;
NSString * const NSBuddhistCalendar;
NSString * const NSChineseCalendar;
NSString * const NSHebrewCalendar;
NSString * const NSIslamicCalendar;
NSString * const NSIslamicCivilCalendar;
NSString * const NSJapaneseCalendar;

これらの識別子を使用してNSCalendarオブジェクトの初期化をする場合は、initWithCalendarIdentifier:メソッドを使用してください

・NSGregorianCalendar
グレゴリオ暦の識別子です

343

・NSBuddhistCalendar
仏滅紀元(仏暦)の識別子です

344

・NSChineseCalendar
中国暦(未サポート)の識別子です
注:中国暦はMac OS X v10.4~10.5ではサポートしていません
たとえこの定数を使用してカレンダーを作成しても、オブジェクトが正常に機能しません
(iPhone Simulator 3.1.3で試した時はグレゴリオ暦と同じ結果になりました)

・NSHebrewCalendar
ユダヤ暦の識別子です

345

・NSIslamicCalendar
ヒジュラ暦(イスラム暦)の識別子です

346

・NSIslamicCivilCalendar
イスラム市民歴の識別子です
(太陰暦であるヒジュラ暦は、1年約354日であることから季節とずれるため、現代ではグレゴリオ暦が併用されていると『Wikipedia/ヒジュラ歴』には解説されているのですが、試してみるとグレゴリオ暦ともヒジュラ暦とも異なるため、どういう暦なのかよく分かりません)

347

・NSJapaneseCalendar
日本の暦(和暦)の識別子です

348


・setCalendar:
(NSDateFormatterクラス)

- (void)setCalendar:(NSCalendar *)calendar

レシーバのカレンダーを設定します

calendar:レシーバのカレンダーを指定します


・setDateFormat:
(NSDateFormatterクラス)

- (void)setDateFormat:(NSString *)string

レシーバの日付フォーマット(書式)を設定します

string:レシーバの日付フォーマットを指定します
Data Formatting Programming Guide for Cocoa』の日付フォーマットの許可する変換指定のリストを参照してください
(Mac OS 10.4以降はUnicodeのLocale Data Markup Languageを使用しているということで、『Unicode Technical Standard #35/Locale Data Markup Language/Appendices/Date Format Patterns』にリンクが張られています)



参考文献

NSCalendar Class Reference

NSLocale Class Reference

NSDateFormatter Class Reference

Wikipedia/グレゴリオ暦

Wikipedia/仏滅紀元

Wikipedia/中国暦

Wikipedia/ユダヤ暦

Wikipedia/ヒジュラ歴

Wikipedia/和暦

Unicode Technical Standard #35/Locale Data Markup Language/Appendices/Date Format Patterns

基礎からのiOS SDK基礎からのiOS SDK
(2010/10/09)
鶴薗 賢吾、松浦 健一郎 他

商品詳細を見る






Lifestyle 650 home entertainment system
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
10 | 2017/11 | 12
Sun Mon Tue Wed Thu Fri Sat
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

Lifestyle 650 home entertainment system
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR