1

カレンダーを使用していますが、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年に(世界標準で使用される)日付を作成させる方法はありますか?

4

1 に答える 1

0

日付を渡すときに基準年を指定できます。使用する代わりに

[formatter setDateFormat:@"DDD"];

使用する

[formatter setDateFormat:@"yyyy-DDD"];

次に、曜日の文字列を次のように変更します

NSString *dayOfTheYearString = [NSString stringWithFormat:@"1970-%i", i];
于 2013-03-05T20:02:49.587 に答える