2012-03-07 59 views
2

我需要使用什麼格式字符串來解析字符串值「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

回答