1

日付フォーマッタに関連する問題があります。日付「2012-10-21」に対してnullが返されます。

他のものが結果に干渉しないことを確認するために、テストしたいコードのみを使用してサンプルプロジェクトを作成しました。

iOS 5では期待どおりに実行されていますが、iOS6では日付フォーマッターがnullを返しています。

これは私のコードです:

NSString *myStringDate = @"2012-10-21";

//------------------------//

NSLog(@"Test 1");

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd"];
NSDate *myDate = [formatter dateFromString:myStringDate];
NSLog(@"Date: %@", myDate);

//------------------------//

NSLog(@"Test 2");

NSDateFormatter *formatter2 = [[NSDateFormatter alloc] init];
[formatter2 setDateFormat:@"yyyy-MM-dd"];
[formatter2 setTimeZone:[NSTimeZone systemTimeZone]];
NSDate *myDate2 = [formatter2 dateFromString:myStringDate];
NSLog(@"TimeZone: %@", [NSTimeZone systemTimeZone]);
NSLog(@"Date: %@", myDate2);

//------------------------//

NSLog(@"Test 3");

NSDateFormatter *formatter3 = [[NSDateFormatter alloc] init];
[formatter3 setDateFormat:@"yyyy-MM-dd"];
[formatter3 setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:-7200]];
NSDate *myDate3 = [formatter3 dateFromString:myStringDate];
NSLog(@"TimeZone: %@", [NSTimeZone timeZoneForSecondsFromGMT:-7200]);
NSLog(@"Date: %@", myDate3);

//------------------------//

iOS 5.1シミュレーターの結果:

Test 1
Date: 2012-10-21 03:00:00 +0000

Test 2
TimeZone: America/Sao_Paulo (BRST) offset -7200 (Daylight)
Date: 2012-10-21 03:00:00 +0000

Test 3
TimeZone: GMT-0200 (GMT-02:00) offset -7200
Date: 2012-10-21 02:00:00 +0000

iOS 6.0シミュレーターの結果:

Test 1
Date: (null)

Test 2
TimeZone: America/Sao_Paulo (GMT-03:00) offset -7200 (Daylight)
Date: (null)

Test 3
TimeZone: GMT-0200 (GMT-02:00) offset -7200
Date: 2012-10-21 02:00:00 +0000

NSDateFormatterは、日付が。の場合にのみiOS6でnullを返します"2012-10-21"。2012年の他のすべての日付については、両方のiOSバージョンで正しい結果が得られます。

誰でも理由を説明できますか?そのバグ?私のコードは間違っていますか?

4

2 に答える 2

1

サンパウロでは、10月20日と21日に夏時間が1時間進んで変更されたようです(http://www.timeanddate.com/worldclock/clockchange.html?n=233)。これは偶然のようには思えません。テスト1と2で計算された時間が、10月21日の午前12時から午前1時の間にある可能性がありますが、これは不可能です。iOS 6は、この点でもう少し厳しいかもしれません。

私の知る限り、あなたのコードは問題ないように見えます。これはiOS内のバグである可能性があります(または、意図された動作である可能性があり、iOS 5が問題でした、私にはわかりません!)。他の日付が機能しているように見えるという事実は、OSの問題を示唆しており、ドキュメントには、これが発生するかどうかは説明されていません。

于 2012-10-24T20:31:51.607 に答える
0

これは、日付をデクリメントするために使用しているコードです。

  • (IBAction)showPrevDate:(id)sender {NSString * dateForDecrement = _showDateLbl.text;

    [dateFormatter setDateFormat:@ "MMM d、yyyy(EEE)"]; [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

    NSDate * dateObjectForDecrement = [dateFormatter dateFromString:dateForDecrement];

    intsubtractDays = 1;

    NSDate * dateAfterDecrement = [dateObjectForDecrement dateByAddingTimeInterval:-(24 * 60 * 60 * extractDays)]; [dateFormatter setDateFormat:@ "MMM d、yyyy(EEE)"];

    _showDateLbl.text = [NSString stringWithFormat:@ "%@"、[dateFormatter stringFromDate:dateAfterDecrement]];

}

iOS6では動作しませんが、iOS5では動作します。確認できますか?

于 2012-10-26T20:53:02.183 に答える