"2012-03-07T21:08:23.6875-05:00" の文字列値を NSDate に解析するには、どの形式文字列を使用する必要がありますか?
バックグラウンド:
.NET Web サービスに対して Sudzc ARC を使用しています。Web メソッドは、2 つの .NET DateTime プロパティを返します。どちらも .NET DateTime プロパティですが、Web メソッドはそれらを異なる日付/時刻形式で返しています。
最初の DateTime の値は SQL Server 内で設定され、"2012-03-07T21:08:23" の形式で値を返します。Sudzc はこれをうまく解析します...まだ問題はありません。
2 番目の DateTime の値は、.NET によって DateTime.Now.AddHours(24) として設定されます。Web メソッドは、追加のミリ秒とタイムゾーン オフセットを含む "2012-03-07T21:08:23.6875-05:00" の値としてそれを返します (例: ".6875-05:00")。Sudzc はこの値を NSDate に解析せず、soap.m メソッドの dateFromString は nil の値を返します。
これはNSDateFormaterに関係していると確信しています。soap.m には以下が付属しています...
+ (NSDateFormatter*)dateFormatter {
static NSDateFormatter* formatter;
if(formatter == nil) {
formatter = [[NSDateFormatter alloc] init];
NSLocale* enUS = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[formatter setLocale: enUS];
[formatter setLenient: YES];
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS"];
}
return formatter;
}
// Converts a string to a date.
+ (NSDate*) dateFromString: (NSString*) value {
if([value rangeOfString:@"T"].length != 1) {
value = [NSString stringWithFormat:@"%@T00:00:00.000", value];
}
if([value rangeOfString:@"."].length != 1) {
value = [NSString stringWithFormat:@"%@.000", value];
}
if(value == nil || [value isEqualToString:@""]) { return nil; }
NSDate* outputDate = [[Soap dateFormatter] dateFromString: value];
return outputDate;
}
フォーマット文字列を「yyyy-MM-dd'T'HH:mm:ss.SSS」から「yyyy-MM-dd'T'HH:mm:ss.SSSSSS-zz:zz」に変更しようとしましたが、他のバリアントですが、NSDate は常に nil として返されます。