2

重複の可能性:
iPhoneで複数の日付形式を単一の形式に変換する

RSSを解析し、RSSのコンテンツセクションから日付のNSStringを抽出して、NSDateに変換しようとしています。これが私がこれまでに持っているものです:

RSSコンテンツには、常に時刻が「日時:日付/時刻から終了時刻まで」と表示されます。最初にRSSの各項目をスキャンして、When:と'to'の部分の間にあるものを取得します。次に、NSDateFormatterを設定します。ここに問題があります。2013年9月6日木曜日午後1時と表示される場合もありますが、使用される形式は2013年9月6日木曜日午後1時です。だから...私が解決する必要がある問題は、日付の形式に関係なく、何かを返すことができるように何かを設定することです。これは、「EEE MMM dd、yyyy h:mma」を使用すると、フィードは午後1時とだけ言っています。

NSMutableArray *substrings = [NSMutableArray new];
NSScanner *scanner = [NSScanner scannerWithString:articleImage];
[scanner scanUpToString:@"When: " intoString:nil]; // Scan all characters before #

NSString *substring = nil;
[scanner scanString:@"When: " intoString:nil]; // Scan the # character
if([scanner scanUpToString:@" to" intoString:&substring]) {
    // If the space immediately followed the #, this will be skipped
    //[substrings addObject:substring];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    // this is imporant - we set our input date format to match our input string
    // if format doesn't match you'll get nil from your string, so be careful
    [dateFormatter setDateFormat:@"EEE MMM dd, yyyy h:mma"];
    NSDate *dateFromString = [[NSDate alloc] init];
    // voila!
    dateFromString = [dateFormatter dateFromString:substring];
    self.thetruedate = dateFromString;
    [dateFormatter release];
    NSLog(@"%@",dateFromString);
    [substrings release];
}
4

2 に答える 2

3

RSS で可能なすべての日付形式を含むメソッドを次のように定義します。

- (NSDate *)dateFromSourceString:(NSString *)sourceString {

    NSDate *convertedDate = nil;
    NSArray *dateFormatterList = [NSArray arrayWithObjects:@"EEE MMM dd, yyyy h:mma", 
                                  @"EEE MMM dd, yyyy ha", nil];//include all possible dateformats here

    //sourceString = @"Thu Sep 6, 2013 1:00PM";

    if (sourceString) {

        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

        for (NSString *dateFormatterString in dateFormatterList) {

            [dateFormatter setDateFormat:dateFormatterString];
            NSDate *originalDate = [dateFormatter dateFromString:sourceString];

            if (originalDate) {

                convertedDate = originalDate;
                NSLog(@"Converted date is %@", convertedDate);
                break;
            }
        }
       [dateFormatter release]; //release it if it is a non-arc project
    }

    return convertedDate;
}

そして、それを次のように使用します。

NSMutableArray *substrings = [NSMutableArray new];
NSScanner *scanner = [NSScanner scannerWithString:articleImage];
[scanner scanUpToString:@"When: " intoString:nil]; // Scan all characters before #

NSString *substring = nil;
[scanner scanString:@"When: " intoString:nil]; // Scan the # character
if([scanner scanUpToString:@" to" intoString:&substring]) {
    // If the space immediately followed the #, this will be skipped
    //[substrings addObject:substring];

    // this is imporant - we set our input date format to match our input string
    // if format doesn't match you'll get nil from your string, so be careful

    NSDate *dateFromString = [self dateFromSourceString:substring];
    self.thetruedate = dateFromString;
    NSLog(@"%@",dateFromString);
    [substrings release];
}

dateFromSourceStringメソッドは日付フォーマッタを選択dateFormatterListし、日付への変換を試みます。形式が正しくない場合は、nil が返されます。これはあなたの場合に使用できます。

于 2013-01-25T19:49:27.600 に答える
0

RSS で利用可能なすべてのタイプの日付形式を作成できます。

変換された日付が でなくなるまで、各日付フォーマッタで 1 つずつ変換を続けnullます。無効な形式は変換に失敗し、null を返します。

于 2013-01-25T19:47:34.190 に答える