2011年1月4日火曜日

YYYY じゃなくて yyyy

バグが出るとすれば元日あたりに出るだろうなぁと思ったら出た。
Moneyha ってiPhoneアプリで出た。不具合出た。
レビューは優しさに満ち溢れていたのでとても嬉しかった。
(バグありなのに星4と3を付けてレビューしていただけた。)

Objective-C でのはなし。 Xcode 3.2.5 and iOS SDK 4.2.1 で試してる。

単純な話で、YYYY が間違いだった。 yyyy が正しい。
  1. NSDateFormatter *formatter = [[NSDateFormatter alloc] init];  
  2. [formatter setDateFormat:@"yyyy"]; // ここを @"YYYY" ってしてた。  

これだけだとなんなので、調べる過程で出てきた NSDate のポイントをいくつか。
  1. // とりあえずタイムゾーンを確かめておこうよ  
  2. NSLog(@"%@", [NSTimeZone defaultTimeZone]); // Asia/Tokyo (GMT+09:00) offset 32400  
  3.   
  4. // NSLogはタイムゾーン関係ないから注意。  
  5. NSLog(@"%@", [NSDate date]);  
  6.   
  7. // もうちょいわかり易く。  
  8. NSDateFormatter *formatter = [[NSDateFormatter alloc] init];  
  9. [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];  
  10. NSDate *d = [formatter dateFromString:@"2011-01-01 00:00:00"]; // d は日本時間だよ  
  11. NSLog(@"%@", [formatter stringFromDate:d]); // 当然 2011-01-01 00:00:00  
  12. NSLog(@"%@", d); // こっちは? 2010-12-31 15:00:00 +0000 が正解。タイムゾーンは日本じゃなくてグリニッジ標準時。  


そんな感じで。

YYYY と yyyy の違いはこちらの方のブログに書かれてました。ありがとう。
『NSDateFormatterのYYYY利用時の注意点』
http://d.hatena.ne.jp/mmasashi/20101111/1289489570

0 件のコメント:

コメントを投稿