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总是返回为零。
答
我用它来从.NET Web服务转换与sudzc
https://github.com/boredzo/iso-8601-date-formatter
ISO8601DateFormatter *isoDateFormatter = [[ISO8601DateFormatter alloc] init];
[isoDateFormatter dateFromString: ... ]
NSDateFormatter无法处理 “:” 在时区片。您必须在使用NSDateFormatter解析之前删除该“:”。 – 2012-03-07 02:27:29
应该注意的是,在iOS6中,现在支持时区中的“:”。完整格式为“yyyy-MM-dd'T'HH:mm:ss.SSSSZZZZZ”。 – 2013-10-09 11:34:27