Sudzc没有将2012-03-07T21:08:23.6875-05:00转换为NSDate

时间:2012-03-07 02:24:53

标签: objective-c xcode nsdate nsdateformatter sudzc

我需要使用什么格式字符串将字符串值“2012-03-07T21:08:23.6875-05:00”解析为NSDate?

背景:

我正在使用Sudzc ARC来对抗.NET Web服务。 Web方法返回两个.NET DateTime属性。虽然两者都是.NET DateTime属性,但Web方法以不同的日期/时间格式返回它们。

第一个DateTime的值在SQL Server中设置,并以“2012-03-07T21:08:23”格式返回一个值。 Sudzc解析了这个伟大的......没有问题。

第二个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总是以零形式返回。

1 个答案:

答案 0 :(得分:0)

我使用它来转换来自带有sudzc的.NET Web服务

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

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