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

问题描述:

我需要使用什么格式字符串来解析字符串值“2012-03-07T21:08:23.6875-05:00 “成NSDate?Sudzc没有将2012-03-07T21:08:23.6875-05:转换为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总是返回为零。

+0

NSDateFormatter无法处理 “:” 在时区片。您必须在使用NSDateFormatter解析之前删除该“:”。 – 2012-03-07 02:27:29

+1

应该注意的是,在iOS6中,现在支持时区中的“:”。完整格式为“yyyy-MM-dd'T'HH:mm:ss.SSSSZZZZZ”。 – 2013-10-09 11:34:27

我用它来从.NET Web服务转换与sudzc

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

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