2

我需要使用什么格式的字符串将“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 总是返回为零。

4

1 回答 1

0

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

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

ISO8601DateFormatter *isoDateFormatter = [[ISO8601DateFormatter alloc] init];
[isoDateFormatter dateFromString: ... ]
于 2012-07-18T13:46:27.830 回答