Какую строку формата мне нужно использовать для анализа значения строки «2012-03-07T21: 08: 23.6875-05: 00» в NSDate?
Справочная информация:
Я использую Sudzc ARC против веб-службы .NET. Веб-метод возвращает два свойства .NET DateTime. Хотя оба свойства являются .NET DateTime, веб-метод возвращает их в разных форматах даты и времени.
Первое значение DateTime устанавливается в SQL Server и возвращает значение в этом формате «2012-03-07T21: 08: 23». Sudzc разбирает это замечательно ... проблем пока нет.
Второе значение DateTime устанавливается .NET как DateTime.Now.AddHours (24). Веб-метод возвращает это значение «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;
}
Я попытался изменить строку формата с "гггг-ММ-дд'Т'ХХ: мм: сс.ССС" на "гггг-ММ-дд'Т'ХХ: мм: сс.СССССС-zz: zz "и другие варианты, но NSDate всегда возвращается как ноль.