「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
どのようにできるのか ?
[編集] 最初の醜い解決策:
- 正規表現で最後のコロンを削除する
- この形式の文字列を「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"];