Sudzc не преобразует 2012-03-07T21: 08: 23.6875-05: 00 в NSDate - PullRequest
2 голосов
/ 07 марта 2012

Какую строку формата мне нужно использовать для анализа значения строки «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 всегда возвращается как ноль.

1 Ответ

0 голосов
/ 18 июля 2012

Я использую это для преобразования из веб-службы .NET с помощью sudzc

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

ISO8601DateFormatter *isoDateFormatter = [[ISO8601DateFormatter alloc] init];
[isoDateFormatter dateFromString: ... ]
...