カレンダーを使用していますが、iOS5.0とiOS6.0で動作が異なるNSDateFormatterに問題があることがわかりました。1年の特定の日の日付を作成しようとしています。たとえば、今年の59日目はどれか知りたいです。
これを実現するには、NSDateFormatterを使用して、日付形式を「DDD」(1年の3桁の日)に設定し、その日を含む文字列を解析してみます。
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
// just gettting rid of the timezone
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
[formatter setDateFormat:@"DDD"];
NSMutableString *outPutString = [NSMutableString stringWithString:@"\n"];
for (int i = 1; i <= 366; i++)
{
NSString *dayOfTheYearString = [NSString stringWithFormat:@"%i", i];
[outPutString appendFormat:@"%3i: %@ string:(%@)\n", i, [formatter dateFromString:dayOfTheYearString], dayOfTheYearString];
}
NSLog(@"%@", outPutString);
[formatter release];
iOS5.0Simulatorでこれを実行すると正常に動作します。コンソールは次のように印刷します。
001: 1970-01-01 00:00:00 +0000 string:(1)
002: 1970-01-02 00:00:00 +0000 string:(2)
003: 1970-01-03 00:00:00 +0000 string:(3)
004: 1970-01-04 00:00:00 +0000 string:(4)
005: 1970-01-05 00:00:00 +0000 string:(5)
[...]
058: 1970-02-27 00:00:00 +0000 string:(58)
059: 1970-02-28 00:00:00 +0000 string:(59)
060: 1970-03-01 00:00:00 +0000 string:(60)
061: 1970-03-02 00:00:00 +0000 string:(61)
[...]
しかし、iOS 6.0では、コンソールは次のように出力します。
001: 2000-01-01 00:00:00 +0000 string:(1)
002: 2000-01-02 00:00:00 +0000 string:(2)
003: 2000-01-03 00:00:00 +0000 string:(3)
004: 2000-01-04 00:00:00 +0000 string:(4)
005: 2000-01-05 00:00:00 +0000 string:(5)
[...]
058: 2000-02-27 00:00:00 +0000 string:(58)
059: 2000-02-28 00:00:00 +0000 string:(59)
060: 2000-02-29 00:00:00 +0000 string:(60)
061: 2000-03-01 00:00:00 +0000 string:(61)
[...]
そして、これが私の主な問題です。2000年はうるう年なので、次の計算結果はiOS5.0とiOS6.0で異なります。
x日を求めるときは、うるう年かどうかを意識する必要があることを知っています。しかし、その年についての情報を提供しなければ、結果の日付は1970年になると思います。
では、iOS 6.0で他に言及されていない場合、NSDateFormatterに1970年に(世界標準で使用される)日付を作成させる方法はありますか?