我需要使用什么格式的字符串将“2012-03-07T21:08:23.6875-05:00”的字符串值解析为 NSDate?
背景:
我正在针对 .NET Web 服务使用 Sudzc ARC。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 总是返回为零。