2011年2月22日火曜日

NSDateのロケール

iOS4.1ではNSDateはGMT時刻を持っているようだ。

NSDate *d = [NSDate date];
NSComparisonResult result = [d compare yesterday];
上記のコードのうち前日の23:59頃にyesterdayの値を格納していて、
翌日の0:01に上記コードを実行した場合、
期待しているのはNSOrderedDescendingなのであるが、
NSOrdearedSameが返ってくる。
これは日本時刻では日付は変わっているが
NSDateが持っているGMT時刻では日付は変わっていないので
結果が同じ日付と判断されてしまう。

NSDateにロケールを設定する仕組みが調べた限りでは無さそうなので、
仕方なくNSDateComponentに変換して日付で比較することにした。
NSDateComponentは実行環境のロケールに従った日付に変換するようだ。

0 件のコメント:

コメントを投稿