2

「2012-08-01T12:43:35+02:00」のように NSString を NSDate に変換する必要がありますが、適切な形式が見つかりません...

このカテゴリ コードを使用して NSString を NSDate に変換します。

[NSDate dateFromString:@"2012-08-01T12:43:35+02:00" withFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZ"];

 

+ (NSDate*) dateFromString:(NSString*)dateString withFormat:(NSString*)format 
{
    return [self dateFromString:dateString withFormat:format andLocaleIdentifier:@"fr"];
}

+ (NSDate*) dateFromString:(NSString*)dateString withFormat:(NSString*)format andLocaleIdentifier:(NSString*)localeIdentifier
{
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];    
    [dateFormatter setDateFormat:format];
    [dateFormatter setTimeZone:[NSTimeZone localTimeZone]];

    NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:localeIdentifier];
    [dateFormatter setLocale:locale];
    [locale release];

    NSDate *returnDate = [dateFormatter dateFromString:dateString];
    [dateFormatter release];

    return returnDate;
}

できる限りすべての形式を試しましたが、誰も正しいものはありません...

yyyy-MM-dd'T'HH:mm:ss >> 2012-08-04T18:05:14
yyyy-MM-dd'T'HH:mm:ssv >> 2012-08-04T18:05:14フランス時間
yyyy -MM-dd'T'HH:mm:ssvv >> 2012-08-04T18:05:14GMT+02:00
yyyy-MM-dd'T'HH:mm:ssvvv >> 2012-08-04T18:05: 14GMT+02:00
yyyy-MM-dd'T'HH:mm:ssV >> 2012-08-04T18:05:14CEST
yyyy-MM-dd'T'HH:mm:ssVV >> 2012-08-04T18: 05:14GMT+02:00
yyyy-MM-dd'T'HH:mm:ssVVV >> 2012-08-04T18:05:14GMT+02:00
yyyy-MM-dd'T'HH:mm:ssVVVV >> 2012-08-04T18:05:14フランス時間
yyyy-MM-dd'T'HH:mm:ssz >> 2012-08-04T18:05:14GMT+02:00
yyyy-MM-dd'T'HH:mm:sszz >> 2012-08-04T18:05:14GMT+02:00
yyyy-MM-dd'T'HH:mm:sszzz>> 2012-08-04T18:05:14GMT+02:00
yyyy-MM-dd'T'HH:mm:sszzzz >> 2012-08-04T18:05:14中央ヨーロッパ夏時間
yyyy-MM-dd'T' HH:mm:ssZ >> 2012-08-04T18:05:14+0200
yyyy-MM-dd'T'HH:mm:ssZZ >> 2012-08-04T18:05:14+0200
yyyy-MM-dd' T'HH:mm:ssZZZ >> 2012-08-04T18:05:14+0200
yyyy-MM-dd'T'HH:mm:ssZZZZ >> 2012-08-04T18:05:14GMT+02:00

どのようにできるのか ?


[編集] 最初の醜い解決策:

  1. 正規表現で最後のコロンを削除する
  2. この形式の文字列を「yyyy-MM-dd'T'HH:mm:ssZZZ」に変換します

正規表現があります

    NSString* dateString = @"2012-08-01T12:43:35+02:00";
    NSMutableString* dateWithoutColonString = [dateString mutableCopy];

    NSRegularExpression* lastColonRegex = [NSRegularExpression
                                           regularExpressionWithPattern:@"([\\+\\-][0-9][0-9]):"
                                           options:NSRegularExpressionCaseInsensitive
                                           error:nil];

    [lastColonRegex replaceMatchesInString:dateWithoutColonString
                              options:NSRegularExpressionCaseInsensitive
                                range:NSMakeRange(0, [dateString  length])
                         withTemplate:@"$1"];
4

2 に答える 2

1

[フォーマッタ setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"]; を使用します。

于 2014-09-09T07:34:00.573 に答える
0

Apple は、あなたのコードに似ているインターネット形式の日付を解析することについて議論していますが、いくつかの変更があります。常にen_US_POSIXロケールを使用し[NSTimeZone timeZoneForSecondsFromGMT:0]、解析にはローカル タイムゾーンの代わりに使用します。それを試して、結果がより適切に機能するかどうかを確認してください。

于 2012-08-04T16:42:10.977 に答える