2

"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 として返されます。

4

1 に答える 1

0

これを使用して、sudzcを使用して.NETWebサービスから変換します

https://github.com/boredzo/iso-8601-date-formatter

ISO8601DateFormatter *isoDateFormatter = [[ISO8601DateFormatter alloc] init];
[isoDateFormatter dateFromString: ... ]
于 2012-07-18T13:46:27.830 に答える