まずはカレンダーを表示するための基準となる今日の値を取得します。
取得の仕方は次の通りです。
NSDate *now = [NSDate date];
この"NSDate"は、
グレゴリオ暦2001年1月1日0:00:00(世界標準時)からの
経過秒数で日時を扱うクラスで、
iPhoneの設定などによって変化しない値。
では、実際にどんな値が入っているか見てみましょう。
NSDate *now = [NSDate date];
NSLog(@"結果:%@", now);
↓出力内容↓
結果:2011-11-28 04:35:01 +0000
上記のよう値が得られました。
結果の"+0000"は、グリニッジ標準時との
差分を表しています。
つまり、時差無しってことですね。
日本は+0900のはずなのに・・・
※世界の主要都市の時差はこちらで確認できます。
この結果からも、システムの設定には
影響を受けない事が分かりました。
今日の値は取得出来ましたが、
時間がズレているのは困ります。
そこで、
まずはiPhoneのシステム設定にしたがった
日付と時刻を取得する準備です。
これはとてもシンプルです。
NSCalendar *baseCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
以上でシステム設定に従った
カレンダー表示のための準備ができました。
システム設定に従ったと書きましたが、
設定アプリで言語環境の書式を
日本にしていてもアメリカにしていても
又、カレンダーが和暦でも西暦でも
グレゴリオ暦のカレンダーが取得されます。
タイムゾーンはiPhoneの設定に従います。
※システムのカレンダー通りの表示をする場合は↓
NSCalendar *baseCalendar = [NSCalendar currentCalendar];
でした。σ(^_^;)
次は、
取得した今日の値を、さきほど作成した
”baseCalendar”を利用して
iPhoneの時刻と一致した値を取得します。
NSInteger flag = NSYearCalendarUnit
| NSMonthCalendarUnit
| NSDayCalendarUnit
| NSDayCalendarUnit
| NSHourCalendarUnit
| NSMinuteCalendarUnit;
NSDateComponents *baseComponents = [baseCalendar components:flag fromDate:baseDate];
NSString *str = [NSString stringWithFormat:@"%d年 %02d月 %02d日 %02d:%02d",
[baseComponents year], [baseComponents month],
[baseComponents day], [baseComponents hour],
[baseComponents minute]];
NSLog(@"結果:%@", str);
結果:2011年11月28日16:25
これだけの文章を書くのに少し時間を使いすぎてしまったので、
カレンダーに表示は次回という事で・・・
※内容を100%保証するものではありません。
間違いなどお気づきの時は、コメントいただけると
嬉しいです。
