1

更新: サーバー json から 2012/09/05 10:45 に変換された日付を取得できました

    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    [df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

NSDateFormatter *df = [[NSDateFormatter alloc] init];
         [df setDateFormat:@"YYYY-MM-dd HH:mm:ss"];


    for (NSString *slotKey in myslots.allKeys) {
        NSDictionary *slot = [myslots valueForKey:slotKey];

        for (myDays in slot){

            if ([[self.myDays objectForKey:@"isReservable"] isEqualToNumber:[NSNumber numberWithInt:1]]){

                NSDate *newDate = [df dateFromString:[self.myDays objectForKey:@"begin"]];
                if (newDate){
                    [self.timesArray addObject:newDate];

                }
                NSLog(@"these are the returned newdates: %@",newDate);
                NSLog(@"This is the timesArray: %@", self.timesArray);
            }


        }        
    }

These の NSLog はまだ null を返していますが、This is the timesArray is () 何が問題なのかわかりません。助けてくれてありがとう。

4

3 に答える 3

2

入力が有効であると確信していますか?

また、最初のログには、日付フォーマッタが割り当てられたことが示されているだけで、入力の結果が生成されるわけではありません。

簡単なテストを実行しました。問題は日付のタイムゾーン部分にあるようです。次のコードが返されます。date is 2012-10-04 16:15:00 +0000

NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"YYYY-MM-dd HH:mm:ss V"];
NSDate* date = [df dateFromString:@"2012-10-04 09:15:00 PT"];
NSLog(@"date is %@", date);

次のように、日付フォーマッタが文字列から日付を取得できるかどうかを明示的に確認できます。

    __autoreleasing NSDate* date2 = nil;
    NSRange dateRange = NSMakeRange(0, [@"2012-10-04 09:15:00 PT" length]);
    __autoreleasing NSError* err = nil;

    BOOL canMakeDate = [df getObjectValue:&date2 forString:@"2012-10-04 09:15:00 PT" range:&dateRange error:&err];
    NSLog(@"could get a date %@, from range %@. Got %@", canMakeDate ? @"YES" : @"NO", NSStringFromRange(dateRange), date2);

日付文字列はサーバー側から来ているので、タイムゾーンがどのように送信されているかを調査し、手動で変更することをお勧めします。きれいではありませんが、正規表現はあなたの友達です。

于 2012-09-05T15:12:17.413 に答える
0

dateFromString:nil文字列を日付に変換できない場合に返されます。形式Vは、太平洋時間の「PT」など、位置情報以外の一般的な形式のタイム ゾーンと一致します。タイムゾーンを記述するために提供しているものは完全に異なるため、フォーマッターには意味不明です。

NSTimezoneこれは理解できる形式だと思うので、文字列を抽出して を作成しNSTimezone、それを使用して UTC からのオフセットを取得し、必要に応じて「America/Los_Angeles」を「-0700」または「-0800」に置き換えます。次に、「Z」フォーマット指定子を使用してそれを解析します。

日付形式の詳細については、ICU ユーザー ガイドのセクションを参照してください。

于 2012-09-05T16:13:42.373 に答える
0

注意すべきことの 1 つYYYYは、日付形式で使用することです。YYYYと同じではありませんyyyy

YYYY= 年 (「年の週」ベースのカレンダー)。この年の指定は、ISO 8601 で定義されている ISO 年週カレンダーで使用されますが、週の日付処理が必要な非グレゴリオ暦ベースのカレンダー システムで使用できます。常に暦年と同じ値になるとは限りません。

yyyy= は、年を 2012 (グレゴリオ暦) の形式で返します。

また、TimeZone が短い形式V(PT) になるように指定しています。長い形式VVVVの United States (Los Angeles)を使用してみてください。

于 2012-09-05T16:26:45.587 に答える